【问题标题】:Updating and persisting dataset problem更新和持久化数据集问题
【发布时间】:2009-05-13 15:59:46
【问题描述】:

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

并发冲突: 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");
        }
    }

现在,我的最终目标是通过 OLEdb 将这种代码与 MsAccess 一起使用,但因为我希望它尽可能清晰,所以我尝试了带有本机 .net 支持的 MSSQL(这里仍然是 2k),但仍然出现错误...

【问题讨论】:

    标签: c# dataset persistence


    【解决方案1】:

    更新失败,因为它找不到与提供的客户 ID 匹配的记录,我认为这是因为参数值没有被默认 - SQL 参数还有其他值可以让你这样做这个。

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

    【讨论】:

    • +1,用于提供信息,但更多的解决方案将不胜感激;此外,我在 sqlparameters 中没有看到类似默认的字段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2022-11-11
    • 2018-04-26
    • 1970-01-01
    相关资源
    最近更新 更多