我想我错过了......这里很简单:我想更新一个数据集并将其推回到它来自的数据库,但我一直在得到:
并发冲突: UpdateCommand影响了0 预计1条记录。
以下是产生此错误的一些代码:
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支持,但仍然得到错误... < / p>
答案 0 :(得分:2)
更新失败,因为它无法找到与提供的客户ID匹配的记录,我认为这是因为参数值没有默认值 - 还有其他值允许您执行的SQL参数此
如果您正在查看OLEDB,您需要注意参数未命名(您可以并且可能应该命名它们,但它们将按照输入的顺序使用,而不是根据它们的名称使用 - 这也是意味着你不能两次使用相同的参数,这可能有点单调乏味。)