2013-11-24 74 views
0

我试图使用这个Update命令,但它不能正常工作。当我在SQL Server 2008中运行它,但不能在Visual Studio 2012Visual Studio 2012更新查询

SqlCommand cmd= new SqlCommand("UPDATE dwh_staging_table SET pestpopulation1 = @avg_pest1 WHERE DistrictName = @DistrictName and TownName = @TownName And VarietyOfCrop = @V_Crop And pestpopulation1 = @pest", con1); 
cmd.Parameters.AddWithValue("@avg_pest1",16); 
cmd.Parameters.AddWithValue("@DistrictName", "Multan"); 
cmd.Parameters.AddWithValue("@TownName","Ambala"); 
cmd.Parameters.AddWithValue("@V_Crop","NIAB 999"); 
cmd.Parameters.AddWithValue("@pest",0); 

adapter.UpdateCommand = cmd; 
+0

其中petpopulation为零它不产生任何错误其只是不updatng值当我运行在MS SQL Server 2008相同的查询它的工作原理.. – user1056466

+0

您正在分配更新命令来选择适配器命令检查我的答案,并使用参数terrie查询,以避免SQL注入攻击 –

回答

3

您分配Sql Update CommandSqlDataAdapterSelectCommand这是工作。

试试这个:

adapter.UpdateCommand = new SqlCommand("your update command"); 

注:您的更新命令是开放的SQL injection attacks
使用PARAMETERISED QUERIES来避免它们。

参数化查询示例:

SqlCommand cmd=new SqlCommand("update products set [email protected] where [email protected]"); 

cmd.Parameters.AddWithValue("@price",1234); 
cmd.Parameters.AddWithValue("@id",12); 

adapter.UpdateCommand=cmd; 

完整的解决方案:(使用参数化查询)

SqlCommand cmd = new SqlCommand("UPDATE dwh_staging_table SET [email protected] WHERE [email protected] and [email protected] And [email protected] And [email protected]", con1); 

cmd.Parameters.AddWithValue("@pestpopulation1", row[3]); 
cmd.Parameters.AddWithValue("@DistrictName", row[0].ToString()); 
cmd.Parameters.AddWithValue("@TownName", row[1].ToString()); 
cmd.Parameters.AddWithValue("@VarietyOfCrop", row[2].ToString()); 
cmd.Parameters.AddWithValue("@pestpopulation11", 0); 

adapter.UpdateCommand = cmd; 
+0

仍然无法更新.. – user1056466

+0

@ user1056466:检查我的编辑答案与节'完整的解决方案' –

+0

@ user1056466:调用.ToString()上的区名,城镇,VarietyOfCrop命令参数我的答案,检查我编辑的版本。 –