C# 在DataAdapter中,为什么在手动更改列中的值时使用UPDATESQL语句

C# 在DataAdapter中,为什么在手动更改列中的值时使用UPDATESQL语句,c#,ado.net,C#,Ado.net,我是DataAdapter的新手。所以请容忍我 当我们必须通过实际赋值来更改数据表中的值时,为什么需要UpdateSqlCommand和Update SQL语句以及Update命令的值(使用参数)。这意味着仅提供更新SQL不起作用 我们必须这样做,只有在执行DataAdapter.Update()时,数据库才会得到更新 因为像这里一样,行[0]的列值是手动更改的。但是,如果DataTable中有10行,并且我们希望根据updatesql语句条件更改多行中的值 这是可以工作的完整代码,但我不理解当

我是DataAdapter的新手。所以请容忍我

当我们必须通过实际赋值来更改数据表中的值时,为什么需要Update
SqlCommand
和Update SQL语句以及Update命令的值(使用参数)。这意味着仅提供更新SQL不起作用

我们必须这样做,只有在执行
DataAdapter.Update()
时,数据库才会得到更新

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

这是可以工作的完整代码,但我不理解当实际工作通过手动更改特定行的列中的值来完成时,使用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]);
            }
        }
    }
}

这是为其他面临同样怀疑的人准备的

我刚发现

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

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

我希望我清楚:)

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]);
            }
        }
    }
}