SqlCommandBuilder 的强大作用

前面提到用 SqlCommandBuilder 读取 sqlserver 的存储过程参数,其实这个类还有一个更强大的用处;

为了生成 INSERT、UPDATE 或 DELETE 语句,SqlCommandBuilder 会自动使用 SelectCommand 属性来检索所需的元数据集。
个人理解:你只需要写下 select 的 sql 语句,其他的语句就自动生成,你不必要再写其他的语句的,是不是很方便Smile

如:

public static DataSet SelectSqlRows(string connectionString,
    string queryString, string tableName)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = new SqlCommand(queryString, connection);
        SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

        connection.Open();

        DataSet dataSet = new DataSet();
        adapter.Fill(dataSet, tableName);

        //code to modify data in DataSet here

        //Without the SqlCommandBuilder this line would fail
        adapter.Update(dataSet, tableName);

        return dataSet;
    }
}

 需要注意的是:queryString 这个 SQL 语句还必须至少返回一个主键列或唯一的列。如果什么都没有返回,就会产生 InvalidOperation 异常,不生成命令。
还有其他需要注意的地方,请参阅 vs2005 的帮助。

看上面的示例,只写了一个 SelectCommand ,再和 SqlCommandBuilder 关联起来,你就可以使用 Update 直接更新了。