更新和持久化数据集问题

时间:2009-05-13 15:59:47

标签: c# dataset persistence

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

  

并发冲突:   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>

1 个答案:

答案 0 :(得分:2)

更新失败,因为它无法找到与提供的客户ID匹配的记录,我认为这是因为参数值没有默认值 - 还有其他值允许您执行的SQL参数此

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