2016-09-16 64 views
-2

我有一个数据库存储图像,我想用新的图像替换这些图像。这是事情:我有一个picturebox,在这个picturebox我正在下载一个图像。这个图像是我想用来替换我的数据库中当前图像的列“Id”为6的那个图像。 现在我试图用UPDATE做它,但它不工作,我想知道为什么。这里是我的代码:用c#替换数据库中的图像(使用更新)

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

我的问题是,一些被保存在我的数据库,但无论我与这个代码存钱还不是一个图像的二进制代码。我检查了我的文件流,这是正确的,因为我使用了用于上传到picturebox的相同文件流。我会很高兴任何帮助或想法。

+0

我们将需要更多的信息。初学者的数据库模式是什么?有关SQL参数的信息,请参阅 – JimNicholson

+0

。例如使用二进制数据,你的方式是错误的。代码也有很少的最佳决策 –

+0

我的数据库有两列:Id(这是主键)和Picture。 现在我在这个数据库中有10行,在第6行有一张图片,我想用新的图片替换。 – MaChaToc

回答

2

请勿在查询中硬编码值,而应使用。

 cmd.Parameters.Addnew SqlParameter("@img", img)); 

检查这个cheet sheet on SQL Injection

 string strSql = "UPDATE [tablename] SET [email protected] 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(); 
+0

在我的回答中,我指出了两个主要问题。你能检查它是否适用于你。 – srini

+0

它没有工作,仍然是我以前的结果 – MaChaToc

+0

如果id是你的主键为什么使用“LIKE'”+ i +“'”“”,这意味着你将最终更新id为6和任何* 6 *(16,26,66)。你应该使用WHERE Id = @i – srini