使用update命令时,SQL Server数据更新了所有行中的相同行值.
try {
SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["NORTHWNDConnectionString"].ToString());
myConnection.Open();
foreach (var i in ord) {
SqlCommand sqlcm = new SqlCommand("update Orders Set CustomerID = @CustomerID, EmployeeID = @EmployeeID, ShipVia = @ShipVia, ShipName = @ShipName, ShipAddress = @ShipAddress, ShipCity = @ShipCity, ShipCountry = @ShipCountry", myConnection);
sqlcm.Parameters.AddWithValue("@CustomerID", i.CustomerID);
sqlcm.Parameters.AddWithValue("@EmployeeID", i.EmployeeID);
sqlcm.Parameters.AddWithValue("@ShipVia", i.ShipVia);
sqlcm.Parameters.AddWithValue("@ShipName", i.ShipName);
sqlcm.Parameters.AddWithValue("@ShipAddress", i.ShipAddress);
sqlcm.Parameters.AddWithValue("@ShipCity", i.ShipCity);
sqlcm.Parameters.AddWithValue("@ShipCountry", i.ShipCountry);
sqlcm.ExecuteNonQuery();
sqlcm.Dispose();
}
myConnection.Close();
}
Run Code Online (Sandbox Code Playgroud)
使用此C#代码,结果将是所有行中的相同数据:
10248 VINET 5 3 Vins et alcools Chevalier 59 rue de l'Abbaye Reimsesddf France
10249 VINET 5 3 Vins et alcools Chevalier 59 rue de l'Abbaye Reimsesddf France
10250 VINET 5 3 Vins et alcools Chevalier 59 rue de l'Abbaye Reimsesddf France
Run Code Online (Sandbox Code Playgroud)
我已经改变Reims
到Reimsesddf
了10248号,但它反映了所有行以及其他数据将在所有行更新.
我怎样才能解决这个问题 ?
您的update
语句缺少where
条件 - 因此它更新表中的所有记录:
update Orders Set
CustomerID = @CustomerID, EmployeeID= @EmployeeID,
ShipVia=@ShipVia, ShipName=@ShipName,
ShipAddress=@ShipAddress,ShipCity=@ShipCity,
ShipCountry= @ShipCountry
Run Code Online (Sandbox Code Playgroud)
添加一些条件where
(通过记录的ID或其他)来防止它:
update Orders Set
CustomerID = @CustomerID, EmployeeID= @EmployeeID,
ShipVia=@ShipVia, ShipName=@ShipName,
ShipAddress=@ShipAddress,ShipCity=@ShipCity,
ShipCountry= @ShipCountry
where ID = @ID
Run Code Online (Sandbox Code Playgroud)