0

我正在 c# 桌面应用程序中创建项目。我想添加一些功能,比如当我从数据网格视图中选择行时,数据库中的图像会显示在图片框中。但有一些错误,如:

“参数无效”

我的代码是..

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in dataGridView1.SelectedRows)
            {
                // display content
                string value1 = row.Cells[0].Value.ToString();
                string value2 = row.Cells[1].Value.ToString();
                label2.Text = value1;
                label4.Text = value2;

            //Display Image
            SqlConnection cn = new SqlConnection();
            string str = "Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\PROJECT\\NEW\\CASTING CALCULATING SYSTEM\\CASTING CALCULATING SYSTEM\\DB_CASTING.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True;";
            cn.ConnectionString = str;
            SqlCommand cmd = new SqlCommand ();
            cmd.Connection = cn;
            string strsql = "select image from EmpMaster WHERE Fname = '" +value2+ "'";
            cmd.CommandText = strsql ;
            cn.Open();
            SqlDataReader dr;

            try
            {

              dr = cmd.ExecuteReader();
              if (dr.Read())
              {
                 byte[] picarr = (byte[])dr["image"];
                 MemoryStream ms = new MemoryStream(picarr);
                 ms.Seek(0, SeekOrigin.Begin);
                 pictureBox1.Image = Image.FromStream(ms);
              }
            }
            catch (Exception ex)
            {
               MessageBox.Show(ex.Message);
            }
            finally
            {
              cn.Close();
            }
        }

    }
4

1 回答 1

0

这很可能是内存上限问题,请参阅此线程以获取示例。

所以这基本上是问题出在图像方面,而不是你的 SQL。这可能与纯内存的原因不同,图片构造函数可能失败的原因有很多。

此外,DJ KRAZE 是对的,您需要对 SQL 查询做一些工作。作为最低使用参数(显着降低 SQL 注入攻击的风险)并将 SqlConnection 和 SqlDataReader 放入 using 块中,以确保它们被正确处理。

于 2013-04-01T14:49:25.870 回答