我有一个存储有图像的数据库,我想用新的图像替换这些图像。事情就是这样:我有一个图片框,在这个图片框中我正在下载图片。这个图像是我想用来替换我的数据库的当前图像,我的列“Id”是6。 现在我试图用更新来做它但是它不起作用我想知道为什么。这是我的代码:
private void buttonReplace_Click(object sender, EventArgs e)
{
string sql = "SELECT * FROM [Insert_Image]"; //name of database
SqlDataAdapter dA = new SqlDataAdapter(sql, cn);
DataTable dT = new DataTable();
dA.Fill(dT);
int z = dT.Rows.Count + 1;
int i = 6;
try
{
cn.Open();
byte[] img = null;
FileStream fs = new FileStream(imgLoc, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
img = br.ReadBytes((int)fs.Length);
string strSql = "UPDATE [Insert_Image] SET Picture = " + @img + " WHERE Id LIKE '" + i + "'";
SqlCommand cmd = new SqlCommand(strSql, cn);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(Convert.ToString(ex));
}
finally
{
cn.Close();
}
}
我的问题是我的数据库中保存了一些内容,但无论我使用此代码保存的内容都不是图像的二进制代码。我检查了我的文件流,这是正确的,因为我使用的是用于上传到图片框的相同文件流。我会很高兴得到任何帮助或想法。
答案 0 :(得分:2)
不要在查询中硬编码值,而是使用。
cmd.Parameters.Addnew SqlParameter("@img", img));
检查此cheet sheet on SQL Injection
string strSql = "UPDATE [tablename] SET Picture=@img WHERE Id LIKE '%@i%'";
SqlCommand cmd = new SqlCommand(strSql, cn);
cmd.Parameters.Add(new SqlParameter("@img", img));
cmd.Parameters.Add(new SqlParameter("@i", i));
cmd.ExecuteNonQuery();