سلام
کاری با کد شما ندارم، (شاید جالب نباشه ولی من همیشه به کد خودم بیشتر اعتماد دارم و ترجیح میدم کد را از اول بنویسم ولی از کد دیگران یا dll شان استفاده نکنم!!!) این کد را همین الآن نوشتم تست نکردم ولی دلیلی برای کار نکردن ندارد!
فرض شده جدولی با نام tablename و دو فیلد keyfield عددی و imagefield باینری دارد. و فرض شده سطر در بانک وجود دارد و ما الآن قصد تغییر آن را داریم میتوانید دستور را به Insert تغییر دهید، اگر تصویری در متغییر Imagefield موجود نباشد دستور در بانک مقدار Null را میریزید و در اصل بدون حذف کل سطر در بانک صرفاً فیلد تصویر خالی میشود.
ذخیره: (keyfield را که حاوی primarykey جدول است به همراه imagefield میدهید و در سطر keyfield تصویر مورد نظر اصلاح میشود.)
Dim imagefield As System.Drawing.Image = Nothing
Dim keyfield As Integer
'...
'...
'imagefield = ???
'keyfield =???
'...
Using dbCon As New System.Data.OleDb.OleDbConnection("ConnectionString")
Using dbCom As New System.Data.OleDb.OleDbCommand("UPDATE [tablename] SET [imagefield]=@imagefield WHERE ([keyfield]=@keyfield)", dbCon)
dbCom.Parameters.AddRange( _
New System.Data.OleDb.OleDbParameter() { _
New System.Data.OleDb.OleDbParameter("@imagefield", System.Data.OleDb.OleDbType.VarBinary, 0, Nothing, True, CByte(0), CByte(0), Nothing, System.Data.DataRowVersion.Current, Nothing), _
New System.Data.OleDb.OleDbParameter("@keyfield", System.Data.OleDb.OleDbType.Integer, 0, Nothing, False, CByte(0), CByte(0), Nothing, System.Data.DataRowVersion.Current, keyfield)})
If imagefield Is Nothing Then
dbCom.Parameters.Item(0).Value = System.DBNull.Value
Else
Using strm As New System.IO.MemoryStream
imagefield.Save(strm, System.Drawing.Imaging.ImageFormat.Jpeg)
dbCom.Parameters.Item(0).Value = strm.ToArray
End Using
End If
dbCon.Open()
dbCom.ExecuteNonQuery()
End Using
End Using
بازیابی: (keyfield را که primarykey جدول است میدهید تا سطر مورد نظر مشخص شود، imagefield حاوی عکس موجود در فیلد مربوط خواهد شد.)
Dim imagefield As System.Drawing.Image = Nothing
Dim keyfield As Integer
Using dbCon As New System.Data.OleDb.OleDbConnection("ConnectionString")
Using dbCom As New System.Data.OleDb.OleDbCommand("SELECT [imagefield] FROM [tablename] WHERE ([keyfield]=@keyfield)", dbCon)
dbCom.Parameters.AddWithValue("@keyfield", keyfield)
dbCon.Open()
Dim buffer() As Byte = TryCast(dbCom.ExecuteScalar, Byte())
dbCon.Close()
If buffer IsNot Nothing AndAlso buffer.Length > 0 Then
Using strm As New System.IO.MemoryStream(buffer)
imagefield = System.Drawing.Image.FromStream(strm)
End Using
End If
End Using
End Using