我正在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();
}
}
}
答案 0 :(得分:0)
这很可能是内存上限问题,请参阅this thread以获取示例。
所以说的基本上是问题出在Image端,而不是你的SQL。它可能与纯内存有不同的原因,图片构造函数可能会失败的原因很多。
另外,DJ KRAZE是对的,你需要对SQL查询做一些工作。作为最小使用参数(显着降低SQL注入攻击的风险)并将SqlConnection和SqlDataReader放入使用块以确保它们被正确处理。