C# 如何将图像与C上的文本框和组合框一起从SQLServer绑定到图片框中?

C# 如何将图像与C上的文本框和组合框一起从SQLServer绑定到图片框中?,c#,sql-server,visual-studio,datagridview,binding,C#,Sql Server,Visual Studio,Datagridview,Binding,因此,我在sql server上的BikeStore数据库中有一个名为Bicycle的表,由以下列组成: 投标、B名称、描述、B类型、品牌、产地、价格、库存、B图像 只需单击datagridview上的单元格,即可成功地将所有文本框和一个组合框与来自sql server的“我的数据”绑定。代码如下: private void dg1_CellClick(object sender, DataGridViewCellEventArgs e) { bidTxt.Text = dg1.

因此,我在sql server上的BikeStore数据库中有一个名为Bicycle的表,由以下列组成: 投标、B名称、描述、B类型、品牌、产地、价格、库存、B图像

只需单击datagridview上的单元格,即可成功地将所有文本框和一个组合框与来自sql server的“我的数据”绑定。代码如下:

private void dg1_CellClick(object sender, DataGridViewCellEventArgs e)
{
        bidTxt.Text = dg1.SelectedRows[0].Cells[0].Value.ToString();
        bnameTxt.Text = dg1.SelectedRows[0].Cells[1].Value.ToString();
        bdescrichTxt.Text = dg1.SelectedRows[0].Cells[2].Value.ToString();
        typeCB.Text = dg1.SelectedRows[0].Cells[3].Value.ToString();
        brandTxt.Text = dg1.SelectedRows[0].Cells[4].Value.ToString();
        originTxt.Text = dg1.SelectedRows[0].Cells[5].Value.ToString();
        priceTxt.Text = dg1.SelectedRows[0].Cells[6].Value.ToString();
        stockTxt.Text = dg1.SelectedRows[0].Cells[7].Value.ToString();
        sqlconn.Open();

        SqlCommand cmd = new SqlCommand("SELECT BImage FROM Bicycle WHERE BID = " + dg1.SelectedRows[0].Cells[0].Value + "", sqlconn);
        da.SelectCommand = cmd;
        DataSet ds = new DataSet();
        byte[] mydata = new byte[0];
        da.Fill(ds, "Bicycle");
        DataRow myrow;
        myrow = ds.Tables["Bicycle"].Rows[8];
        mydata = (byte[])myrow["BImage"];
        MemoryStream stream = new MemoryStream(mydata);
        BikePic.Image = Image.FromStream(stream);

        sqlconn.Close();
}
但每次我尝试加载图像时,它仍然会产生一个错误。代码如下:

private void dg1_CellClick(object sender, DataGridViewCellEventArgs e)
{
        bidTxt.Text = dg1.SelectedRows[0].Cells[0].Value.ToString();
        bnameTxt.Text = dg1.SelectedRows[0].Cells[1].Value.ToString();
        bdescrichTxt.Text = dg1.SelectedRows[0].Cells[2].Value.ToString();
        typeCB.Text = dg1.SelectedRows[0].Cells[3].Value.ToString();
        brandTxt.Text = dg1.SelectedRows[0].Cells[4].Value.ToString();
        originTxt.Text = dg1.SelectedRows[0].Cells[5].Value.ToString();
        priceTxt.Text = dg1.SelectedRows[0].Cells[6].Value.ToString();
        stockTxt.Text = dg1.SelectedRows[0].Cells[7].Value.ToString();
        sqlconn.Open();

        SqlCommand cmd = new SqlCommand("SELECT BImage FROM Bicycle WHERE BID = " + dg1.SelectedRows[0].Cells[0].Value + "", sqlconn);
        da.SelectCommand = cmd;
        DataSet ds = new DataSet();
        byte[] mydata = new byte[0];
        da.Fill(ds, "Bicycle");
        DataRow myrow;
        myrow = ds.Tables["Bicycle"].Rows[8];
        mydata = (byte[])myrow["BImage"];
        MemoryStream stream = new MemoryStream(mydata);
        BikePic.Image = Image.FromStream(stream);

        sqlconn.Close();
}
我做错了什么


这方面我是新手。

如果只是检索该查询上的BLOB,那么您可以做一些更简单的事情:

// SqlConnection creation and opening omitted
using(SqlCommand cmd = new SqlCommand("SELECT BImage FROM Bicycle WHERE BID = " + dg1.SelectedRows[0].Cells[0].Value + "", sqlconn))
{
  byte[] mydata = (byte[])cmd.ExecuteScalar();
  MemoryStream stream = new MemoryStream(mydata);
  BikePic.Image = Image.FromStream(stream);
}
另外,您可能希望在创建图像控件后处理流,但我不能完全确定。

问题已解决!在SqlCommand行的blockquote之间添加单引号,因为它将搜索您要查找的ID,如下所示:

SqlCommand cmd = new SqlCommand("SELECT BImage FROM Bicycle WHERE BID = '" + dg1.SelectedRows[0].Cells[0].Value + "'", sqlconn);
下面是修改前的代码。看到区别了吗

SqlCommand cmd = new SqlCommand("SELECT BImage FROM Bicycle WHERE BID = " + dg1.SelectedRows[0].Cells[0].Value + "", sqlconn);

哈哈,我真傻。谢谢大家

错误到底是什么?在哪一行?SqlException未处理:da.Fillds、Bicycle上的B001列无效;可能重复的谢谢!问题已解决。不幸的是,仍然生成错误。SqlException未经处理:列B001无效。然后必须分析sql查询以找出此列B001的来源。如有必要,请尝试使用SQL Server探查器。