SqlCommandBuilder 的强大作用
前面提到用 SqlCommandBuilder 读取 sqlserver 的存储过程参数,其实这个类还有一个更强大的用处;
为了生成 INSERT、UPDATE 或 DELETE 语句,SqlCommandBuilder 会自动使用 SelectCommand 属性来检索所需的元数据集。
个人理解:你只需要写下 select 的 sql 语句,其他的语句就自动生成,你不必要再写其他的语句的,是不是很方便!
如:
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 直接更新了。