更新和持久化数据集问题

我想我错过了…… 这里很简单:我想更新一个数据集并将其推回到它来自的数据库,但我一直得到一个:

并发冲突:UpdateCommand影响了预期的1条记录中的0条。

这是产生此错误的一些代码:

public static void UpdateNorthWindWithDataset() { string connString = @"Data Source=localhost;Initial Catalog=NorthWind;Integrated Security=SSPI;"; using (SqlConnection conn = new SqlConnection(connString)) { conn.Open(); // Declaring a DataAdapter and initiating it with a Select and updateCommand SqlDataAdapter da = new SqlDataAdapter(); SqlCommand selectCmd = new SqlCommand("SELECT CustomerId, City, Region " + "FROM Customers" , conn ); da.SelectCommand = selectCmd; SqlCommand updateCmd = new SqlCommand( @"UPDATE Customers SET City='@City', Region='@Region'" + @"WHERE CustomerID = '@CustomerID'", conn ); updateCmd.Parameters.AddRange( new SqlParameter[] { new SqlParameter() { ParameterName = "@CustomerID", SourceColumn = "customerid" }, new SqlParameter() { ParameterName = "@City", SourceColumn = "city", SqlDbType = SqlDbType.VarChar }, new SqlParameter() { ParameterName = "@Region", SourceColumn = "region", SqlDbType = SqlDbType.VarChar } } ); da.UpdateCommand = updateCmd; // filling dataset DataSet ds = new DataSet(); da.Fill(ds, "srcCustomers"); // declaring and editing datatable DataTable tblCustomers = ds.Tables["srcCustomers"]; foreach (DataRow row in tblCustomers.Rows) { row["City"] = "justUpdated"; row["Region"] = "justUpdated too"; } da.Update(ds, "srcCustomers"); } } 

现在,我的endgoal正在使用这种代码与MsAccess通过OLEdb,但因为我希望它尽可能清楚,我尝试MSSQL(仍然2k这里)与本机.net支持但仍然得到错误…

更新失败,因为它无法找到与提供的客户ID匹配的记录,我认为这是因为参数值没有默认值 – SQL参数还有其他值可用于执行此操作。

如果您正在查看OLEDB,您需要注意参数未命名(您可以并且可能应该命名它们,但它们将按照输入的顺序使用而不是根据它们的名称 – 这也意味着您可以两次使用相同的参数,这可能有点乏味。