Реферат: Работа с объектами большого объема в MS SQL и ADO
А что, если у вас уже есть изображение (скажем, в объекте PictureBox) и вам нужно сохранить его в базу? В этом случае нужно использовать другой поток – MemoryStream. Вот как это может быть сделано:
sb.Text = "connecting to database..." sb.Refresh() 'Если соединение не открыто, открываем If conn.State <> ConnectionState.Open Then conn.Open() End If sb.Text = "loading image..." sb.Refresh() 'Создание и подготовка к вызову хранимой процедуры Dim cmd As New SqlClient.SqlCommand("AddBlob", conn) cmd.CommandType = CommandType.StoredProcedure 'Сохранение изображения в поток в памяти в формате BMP Dim stream As New MemoryStream() img1.Image.Save(stream, Imaging.ImageFormat.Bmp) stream.Seek(0, SeekOrigin.Begin) 'Подготовка параметров cmd.Parameters.Add("@img", SqlDbType.Image) With cmd.Parameters("@img") .Direction = ParameterDirection.Input 'Воспользуемся удобным методом ToArray. Жалко что его нет у FileStream-a .Value = stream.ToArray() End With 'Вызов хранимой процедуры cmd.ExecuteNonQuery() sb.Text = "Ready" |
Теперь рассмотрим случай, когда нужно извлекать изображение из базы с помощью ADO.NET. Последовательность действий может быть такой:
Открыть соединение.
Подготовить команду (SqlCommand).