Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Сохранить файл в базе SQL на C#


Автор: tatbesidovska 3.2.2011, 13:34
Добрый день! Может кто знает,как сделать. 
 
Нужно реализовать такую беду: Есть GridView, GridControl Devexpress овский, при нажатии на ячейку, открывается диалоговое окно с выбором файла, выбираем файл, предположим .xls (пользователь может выбрать может любой файл любого типа), закрывается окно, файл сохраняется в базу данных SQL. После пользователь может просмотреть этот файл с помощью нажатия на ячейку.Подскажите что-нить, и еще, в базе для этого поля тип данных какой должен быть? Спасибо

Автор: Gluttton 3.2.2011, 13:46
tatbesidovska, какая СУБД?

В общем случае тип данных: BLOB.
Чтение и запись данных может производиться через поток с представление данных как массива бит.

Автор: A5uKa 3.2.2011, 14:53
Цитата

После пользователь может просмотреть этот файл с помощью нажатия на ячейку

Где просматривать ? В гриде ? Тогда вам надо ограничится с числом поддерживаемых форматов и каждый обрабатывать по разному.

Автор: tatbesidovska 3.2.2011, 15:00
Цитата(A5uKa @  3.2.2011,  14:53 Найти цитируемый пост)
Где просматривать ? В гриде ? Тогда вам надо ограничится с числом поддерживаемых форматов и каждый обрабатывать по разному.

нет, просмастривать в гриде не надо, открытие можно реализовать запуском файла ассоциированным приложением. Может у кого есть пример именно сохранения файла в базе

Автор: jonie 3.2.2011, 17:22
Цитата(Gluttton @  3.2.2011,  13:46 Найти цитируемый пост)
tatbesidovska, какая СУБД?

Вы этот вопрос зря игнорируете.

Автор: tatbesidovska 3.2.2011, 18:25
Цитата(jonie @  3.2.2011,  17:22 Найти цитируемый пост)
tatbesidovska, какая СУБД?Вы этот вопрос зря игнорируете.

MS SQL Server

Автор: jonie 3.2.2011, 22:05
Код

create table sometab(
 sflen int,
 sf varbinary(max)
)
GO


и далее как-то так:
Код

byte[] fileBuffer = ....;
SqlConnection conn = ....;

string q = @"INSERT INTO sometab(sflen, sf) VALUES(@sflen, @sf)";
SqlCommand cmd= new SqlCommand(q, conn);
SqlParameter binaryParam = new SqlParameter("@sf", SqlDbType.VarBinary, fileBuffer.Length);
binaryParamValue = fileBuffer;

cmd.Parameters.AddWithValue("@sflen", fileBuffer.Length);
cmd.Parameters.Add(binaryParam);
cmd.ExecuteNonQuery();

Автор: tatbesidovska 4.2.2011, 09:04
а просмотреть файл, при нажатии на ячейку в gridView?

Автор: A5uKa 4.2.2011, 09:14
OnCellClick, потом файл из базы в поток, потом в файл, потом в темп куда-нибудь, потом ShellExecute

Автор: tatbesidovska 4.2.2011, 11:25
может у кого пример есть?

Автор: tatbesidovska 4.2.2011, 14:46
Нашла вот это, но здесь пример для открытия картинки по ID, какой пропишешь в SELECT, та картинка и будет открываться. 
Код

SqlConnection myConnection = new SqlConnection(@"Data Source=ODIN;Initial Catalog=BDOC;User ID=sa;Password=123");
                        String selectCmd = "SELECT * FROM foto WHERE id_image=175";
                        SqlCommand myCommand = new SqlCommand(selectCmd, myConnection);
                        myConnection.Open();
                        SqlDataReader datareader = myCommand.ExecuteReader();
                        datareader.Read();
                        int bLength = (int)datareader.GetBytes(1, 0, null, 0, int.MaxValue);
                        byte[] bBuffer = new byte[bLength];
                        datareader.GetBytes(1, 0, bBuffer, 0, bLength);
                        myConnection.Dispose();
                        MemoryStream mStream = new MemoryStream(bBuffer);
                        Bitmap bmp = new Bitmap(mStream);
                        imageEdit1.Image = bmp;


А как сделать так, чтобы при нажатии на ячейку в gridView открывался тот файл, который закреплен в базе данных за этой ячейкой

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)