C# 在windows应用程序中将图像从DataGridViewImageColumn添加到数据库

C# 在windows应用程序中将图像从DataGridViewImageColumn添加到数据库,c#,vb.net,winforms,datagridview,C#,Vb.net,Winforms,Datagridview,我正在使用vb.net windows应用程序。我正在像这样填充我的DataGridView。我在我的表单load事件中编写代码,如下所示: Dim cd As SqlCommandBuilder = New SqlCommandBuilder(adapter) adapter = New SqlDataAdapter("select c.cid,c.CompanyName,d.dtId,d.dtName as Department,d.dtPhone as Phone,d.dt

我正在使用vb.net windows应用程序。我正在像这样填充我的
DataGridView
。我在我的表单
load
事件中编写代码,如下所示:

Dim cd As SqlCommandBuilder = New SqlCommandBuilder(adapter)
        adapter = New SqlDataAdapter("select c.cid,c.CompanyName,d.dtId,d.dtName as Department,d.dtPhone as Phone,d.dtEmail as Email from CompanyMaster_tbl c join  DepartmentMaster_tbl d on c.Cid=d.cId order by cid", con.connect)
        dt1 = New DataTable
        bSource = New BindingSource
        adapter.Fill(dt1) 'Filling dt with the information from the DB
        bSource.DataSource = dt1
        gv.DataSource = bSource
        gv.Columns("cid").Visible = False
        gv.Columns("dtId").Visible = False
        Dim img As New DataGridViewImageColumn
        img.HeaderText = "image"
        gv.Columns.Insert(6, img)
For i As Integer = 0 To gv.RowCount - 2
    sqlInsertT2 = "Insert Into DepartmentMaster_tbl(dtname,dtphone,dtEmail,Cid) Values ('" + myTI.ToTitleCase(gv.Rows(i).Cells(3).Value) + "','" + gv.Rows(i).Cells(4).Value + "','" + gv.Rows(i).Cells(5).Value + "'," & Ccid & ");"
Next
然后在“单元格内容”中,单击“我编写了如下用于上载图像的代码”:

If e.ColumnIndex = 6 Then
            Dim OFDLogo As New OpenFileDialog()
            OFDLogo.Filter = "JPEG(*.jpg)|*.jpg|BMP(*.bmp)|*.bmp"
            If OFDLogo.ShowDialog() = DialogResult.OK Then
                gv.Rows(e.RowIndex).Cells(6).Value = Image.FromFile(OFDLogo.FileName)
            End If
        End If
在“保存”按钮中,我将保存我的部门详细信息,如下所示:

Dim cd As SqlCommandBuilder = New SqlCommandBuilder(adapter)
        adapter = New SqlDataAdapter("select c.cid,c.CompanyName,d.dtId,d.dtName as Department,d.dtPhone as Phone,d.dtEmail as Email from CompanyMaster_tbl c join  DepartmentMaster_tbl d on c.Cid=d.cId order by cid", con.connect)
        dt1 = New DataTable
        bSource = New BindingSource
        adapter.Fill(dt1) 'Filling dt with the information from the DB
        bSource.DataSource = dt1
        gv.DataSource = bSource
        gv.Columns("cid").Visible = False
        gv.Columns("dtId").Visible = False
        Dim img As New DataGridViewImageColumn
        img.HeaderText = "image"
        gv.Columns.Insert(6, img)
For i As Integer = 0 To gv.RowCount - 2
    sqlInsertT2 = "Insert Into DepartmentMaster_tbl(dtname,dtphone,dtEmail,Cid) Values ('" + myTI.ToTitleCase(gv.Rows(i).Cells(3).Value) + "','" + gv.Rows(i).Cells(4).Value + "','" + gv.Rows(i).Cells(5).Value + "'," & Ccid & ");"
Next
我在部门主表中还有一个字段。字段名称:
empimage
和数据类型
image
。我想将相应的图像保存到此表。如何将图像从数据网格视图图像列保存到数据库。

我的
DataGridView
看起来像这样:

试试这样

Dim cd As SqlCommandBuilder = New SqlCommandBuilder(adapter)
        adapter = New SqlDataAdapter("select c.cid,c.CompanyName,d.dtId,d.dtName as Department,d.dtPhone as Phone,d.dtEmail as Email from CompanyMaster_tbl c join  DepartmentMaster_tbl d on c.Cid=d.cId order by cid", con.connect)
        dt1 = New DataTable
        bSource = New BindingSource
        adapter.Fill(dt1) 'Filling dt with the information from the DB
        bSource.DataSource = dt1
        gv.DataSource = bSource
        gv.Columns("cid").Visible = False
        gv.Columns("dtId").Visible = False
        Dim img As New DataGridViewImageColumn
        img.HeaderText = "image"
        gv.Columns.Insert(6, img)
For i As Integer = 0 To gv.RowCount - 2
    sqlInsertT2 = "Insert Into DepartmentMaster_tbl(dtname,dtphone,dtEmail,Cid) Values ('" + myTI.ToTitleCase(gv.Rows(i).Cells(3).Value) + "','" + gv.Rows(i).Cells(4).Value + "','" + gv.Rows(i).Cells(5).Value + "'," & Ccid & ");"
Next
    Dim sql As String = "INSERT INTO Information VALUES(@name,@photo)"
    Dim cmd As New SqlCommand(sql, con)
    cmd.Parameters.AddWithValue("@name", "DepartmentName")
    Dim ms As New MemoryStream()
    Dim imgCon As New ImageConverter
    ms.Read(imgCon.ConvertTo(DataGridView1.Rows(0).Cells(4).Value, GetType(Byte())), 0, 1024)
    Dim data As Byte() = ms.GetBuffer()
    Dim p As New SqlParameter("@photo", SqlDbType.Image)
    p.Value = data
    cmd.Parameters.Add(p)
    cmd.ExecuteNonQuery()
    MessageBox.Show("Name & Image has been saved", "Save", MessageBoxButtons.OK)

谷歌在我已经查过的那篇文章中找到了-->这篇文章中没有提到如何从datagrid视图保存图像,真的吗?单击
按钮2的
其他
功能如何?您可以用自己的图像替换
p.Value=data
,方法是
p.Value=gv.Rows(e.RowIndex).Cells(6).Value
sir.,我没有使用任何图片,对吗?所以不用这一行:PictureBox1.BackgroundImage.Save(ms,PictureBox1.BackgroundImage.RawFormat)我写了什么?什么都没有。删除以下行
Dim ms As New MemoryStream()
PictureBox1.BackgroundImage.Save(ms,PictureBox1.BackgroundImage.RawFormat)
Dim data As Byte()=ms.GetBuffer()
。它们对于您的目的不是必需的。您唯一需要的是
p.Value=gv.Rows(e.RowIndex).Cells(6).Value
此行出现错误:ms.Read(gv.Rows(0).Cells(6).Value,0,1024)错误是:无法将“System.Drawing.Bitmap”类型的对象强制转换为“System.Byte[]”类型。是的。我没有意识到这一点。Editedsir我会检查并让你知道你可以使用这样的方法将图像转换为字节数组:先生,你的函数发生了什么事……如果我这样做,我就得不到答案了?