用c#替换数据库中的图像(使用UPDATE)

时间:2016-09-16 09:32:58

标签: c# sql

我有一个存储有图像的数据库,我想用新的图像替换这些图像。事情就是这样:我有一个图片框,在这个图片框中我正在下载图片。这个图像是我想用来替换我的数据库的当前图像,我的列“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();
        }
    }

我的问题是我的数据库中保存了一些内容,但无论我使用此代码保存的内容都不是图像的二进制代码。我检查了我的文件流,这是正确的,因为我使用的是用于上传到图片框的相同文件流。我会很高兴得到任何帮助或想法。

1 个答案:

答案 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();