SQL Server:使用update命令时,数据更新了所有行中的相同行值

Raj*_*aja 0 c# sql-server

使用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)

我已经改变ReimsReimsesddf了10248号,但它反映了所有行以及其他数据将在所有行更新.

我怎样才能解决这个问题 ?

And*_*yev 6

您的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)