База все та же:
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;

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