首页 > 解决方案 > 在 DataAdapter 中,当我们必须手动更改列中的值时,为什么我们使用更新 SQL 语句

问题描述

我是 DataAdapter 的新手。所以请多多包涵。

当我们必须通过实际分配来强制更改数据表中的值时,为什么需要 UpdateSqlCommand和 UPDATE SQL 语句并将值赋予 Update 命令(使用参数)。这意味着提供更新 SQL 不起作用?

我们必须这样做,然后数据库才会在我们这样做时更新DataAdapter.Update()

    DataRow categoryRow = categoryTable.Rows[0];
    categoryRow["CategoryName"] = "New Beverages";

因为像这里一样,列值Rows[0]是手动更改的。但是,如果有 10 行,DataTable并且我们希望根据 UPDATE SQL 语句条件更改超过 1 行中的值。

这是有效的完整代码,但是当通过手动更改特定行的列中的值来完成实际工作时,我不明白使用 UPDATE Sqlcommand。

private static void AdapterUpdate(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlDataAdapter dataAdpater = new SqlDataAdapter(
          "SELECT CategoryID, CategoryName FROM Categories",
          connection);

        dataAdpater.UpdateCommand = new SqlCommand(
           "UPDATE Categories SET CategoryName = @CategoryName " +
           "WHERE CategoryID = @CategoryID", connection);

        dataAdpater.UpdateCommand.Parameters.Add(
           "@CategoryName", SqlDbType.NVarChar, 15, "CategoryName");

        SqlParameter parameter = dataAdpater.UpdateCommand.Parameters.Add(
          "@CategoryID", SqlDbType.Int);
        parameter.SourceColumn = "CategoryID";
        parameter.SourceVersion = DataRowVersion.Original;

        DataTable categoryTable = new DataTable();
        dataAdpater.Fill(categoryTable);

        DataRow categoryRow = categoryTable.Rows[0];
        categoryRow["CategoryName"] = "New Beverages";

        dataAdpater.Update(categoryTable);

        Console.WriteLine("Rows after update.");
        foreach (DataRow row in categoryTable.Rows)
        {
            {
                Console.WriteLine("{0}: {1}", row[0], row[1]);
            }
        }
    }
}

标签: c#ado.net

解决方案


这适用于面临同样疑问的其他人。

才想通...

更新 SQL 用于数据库中的更新,它将更新 DataTable 列中给定/更新的值。此外,仅更新 SQL 语句 SET Columns 中提到的那些列将在数据库中更新。因此,如果您更新了 DataTable 列中的值,但它不是 UPDATE SQL 的 SET 列之一,则该值不会更新到数据库中。

因此,还需要 SQL 以及更新的 Datatable 列值。

我希望我很清楚:)


推荐阅读