【问题标题】:How to bind an image into picture box from SQL Server along with a textbox and combo box on C#?如何将图像与 C# 上的文本框和组合框一起从 SQL Server 绑定到图片框?
【发布时间】:2015-10-21 06:32:57
【问题描述】:

所以我在 sql server 上的 BikeStore 数据库中有一个名为 Bicycle 的表,由以下列组成: BID、BName、描述、BType、品牌、产地、价格、库存、BImage

只需单击 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();
}

我做错了什么?

我是新手。

【问题讨论】:

  • 究竟是什么错误?在哪条线上?
  • SqlException 未处理:da.Fill(ds, "Bicycle") 上的 B001 列无效;
  • 谢谢!问题解决了。

标签: c# sql-server visual-studio datagridview binding


【解决方案1】:

如果它只是在该查询中检索 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);
}

此外,您可能希望在创建 Image 控件后处理 stream,但我不完全确定。

【讨论】:

  • 不幸的是仍然产生错误。 “SqlException 未处理:无效列 B001”
  • 那你必须分析sql查询,找出这个列“B001”是从哪里来的。如有必要,请尝试使用 SQL Server Profiler。
【解决方案2】:

问题解决了!在 blockquote 之间的 SqlCommand 行中添加 单引号,因为它会搜索您要查找的 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);

哈哈,我傻了。 谢谢大家!

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 2022-11-15
    • 2016-10-18
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多