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


Автор: MasterOfCode 6.8.2008, 14:23
Сабж. Как?
Использую компоненты System.Data.SqlClient.

Автор: vretsky 6.8.2008, 16:27
опробовано на СУБД SQL Server 2005 :
Код

            try
            {
                SqlCommand cmd = new SqlCommand("select img from testBLOB where ID=1", this.sqlConnection1);
                
                this.sqlConnection1.Open();
                byte[] Img = (byte[])cmd.ExecuteScalar();
                this.sqlConnection1.Close();
                
                FileStream fs = new FileStream("D:\\blob6", FileMode.CreateNew, FileAccess.Write);
                fs.Write(Img, 0, Img.Length);
                fs.Flush();
                fs.Close();

            }
            catch (Exception ex)
            {
                this.sqlConnection1.Close();
                MessageBox.Show(ex.Message);
            }


Автор: MasterOfCode 7.8.2008, 07:57
Спасибо. smile

Автор: Idsa 7.8.2008, 09:55
MasterOfCode, считывание blob-данных - достаточно тонкий момент. Насколько я помню, image в Sql Server 2000 может хранить 2ГБайта памяти. Теперь представьте, что будет в этом случае при выполнении операции:
Код

byte[] Img = (byte[])cmd.ExecuteScalar();

Вероятнее всего, на среднестатистической машине (сервер, может, стерпит) программа вылетит с OutOfMemoryException.
Как быть? Следует использовать последовательное считывание. Вот http://www.akadia.com/services/dotnet_read_write_blob.html есть пример.

Автор: MasterOfCode 7.8.2008, 10:24
Цитата(Idsa @  7.8.2008,  09:55 Найти цитируемый пост)
MasterOfCode, считывание blob-данных - достаточно тонкий момент. Насколько я помню, image в Sql Server 2000 может хранить 2ГБайта памяти. Теперь представьте, что будет в этом случае при выполнении операции:

код C#
1:

byte[] Img = (byte[])cmd.ExecuteScalar();





Вероятнее всего, на среднестатистической машине (сервер, может, стерпит) программа вылетит с OutOfMemoryException.
Как быть? Следует использовать последовательное считывание. Вот здесь есть пример. 


Спасибо! Очень интересно, проверил на всякий случай, есть две записи в который чуть больше чем 512 кб.   остальные намного меньше.  Но я думаю в дальнейшем очень пригодиться.

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