参数对于通过blob从数据库访问图像无效

时间:2013-04-01 14:30:42

标签: c# .net

我正在c#桌面应用程序中创建项目。我想添加一些功能,比如我从datagrid视图中选择行,然后将数据库中的图像显示到pichure框中。但有一些错误,如:

  

“参数无效”

我的代码是..

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();
            }
        }

    }

1 个答案:

答案 0 :(得分:0)

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

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

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