使用CommandBuilder生成的Insert,Update,Delete只能针对一个表,如果当前的DataSet的DataTAble中是多个表或者有计算列的话就不能用ComandBuilder来做.
以前一直困惑.Net的批量数据更新到底应该采取什么方式,原来自己犯了一个最低级的错误,可以自己写Insert和Update及Delete的语句,其中语句中当然会只有对一个表的操作,值部分用"@Parameter"来参数化的填充,然后在各个Command的Parameters里增加参数化,以前一直以为要像ADO中只能增加一个具体值的参数,原来ADO.Net的方式是可以指定" 源列",这样在调用具体的参数化方法是ADO.Net就自动去当前数据集中取当前要处理的DataRow的相应列的值了.
调用存储过程采用同样的方式.
例如:
Da.SelectCommand为:select table1.id,table1.name,table2.address from table1,table2 where table1.id=table2.id
Da.InsertCommand=New SqlCommand("Insert into test(id,name) values(@id,@name)");
Da.InsertCommand.Parameters.Add("@id",SqlDbType.NVarchar,4,"ID");
Da.InsertCommand.Parameters.Add("@id",SqlDbType.NVarchar,10,"Name");
Da.Update(ds);
以前一直困惑.Net的批量数据更新到底应该采取什么方式,原来自己犯了一个最低级的错误,可以自己写Insert和Update及Delete的语句,其中语句中当然会只有对一个表的操作,值部分用"@Parameter"来参数化的填充,然后在各个Command的Parameters里增加参数化,以前一直以为要像ADO中只能增加一个具体值的参数,原来ADO.Net的方式是可以指定" 源列",这样在调用具体的参数化方法是ADO.Net就自动去当前数据集中取当前要处理的DataRow的相应列的值了.
调用存储过程采用同样的方式.
用参数名、SqlDbType、大小及源列名初始化 SqlParameter 类的新实例。
public SqlParameter(
string parameterName,
SqlDbType dbType,
int size,
string sourceColumn
);
参数
-
parameterName
- 要映射的参数的名称。 dbType
- SqlDbType 值之一。 size
- 参数的长度。 sourceColumn
- 源列的名称。
例如:
Da.SelectCommand为:select table1.id,table1.name,table2.address from table1,table2 where table1.id=table2.id
Da.InsertCommand=New SqlCommand("Insert into test(id,name) values(@id,@name)");
Da.InsertCommand.Parameters.Add("@id",SqlDbType.NVarchar,4,"ID");
Da.InsertCommand.Parameters.Add("@id",SqlDbType.NVarchar,10,"Name");
Da.Update(ds);