Примеры Delphi и C# из жизни

Примеры программирования на языках Delphi, C#

 




SQLServerCE - чтение изображения из поля | C#

Рассмотрим пример чтения двоичных данных из поля базы данных для SQLServerCE.

База все та же:
create table Users (
 id int IDENTITY primary key, 
 name ntext, 
 foto image);


Поскольку после запроса на выборку все поля присутствуют в памяти, нам остается считать двоичные данные в буфер и преобразовать в нужный нам объект.
// Устанавливаем соединение с БД
SqlCeConnection connection=new SqlCeConnection("Data Source = Test.sdf");
connection.Open();
// формируем запрос на выборку даных
SqlCeCommand cmd=new SqlCeCommand("select * from Users where id=2>, connection);
// для чтения изображения используем DataReader
SqlCeDataReader datareader = cmd.ExecuteReader();
datareader.Read();
// позиция поля в списке полученных полей 
// замечание: если делать так: select foto from Users where id=2, то позиция будет =0
int FieldPosInQuery = 2;
// первым запросом, используя null вместо буфера - получаем размер хранимых данных
// второй и четвертый параметры (=0 в нашем случае) отвечают за смещение начала получаемых данных и смещение начала записываемых данных в буфер, соответственно. 
//Обычно используются при сложных данных, которые необходимо "собирать вручную"
int length = (int)datareader.GetBytes(FieldPosInQuery, 0, null, 0, int.MaxValue);
// выделяем буфер:
byte[] buf = new byte[length];
// :и читаем непосредственно данные
datareader.GetBytes(FieldPosInQuery, 0, buf, 0, length);
// создаем поток в памяти из данных буфера:
MemoryStream ms = new MemoryStream(buf);
// :и создаем на его основе изображение
Bitmap bmp = new Bitmap(ms);
// отображаем, либо используя файловый поток сохраняем на диск
pictureBox1.Image = bmp;