使用odbcDataAdapter1的update方法,要明白它到底是如何实现的 其实它只不过是根据select 语句和字段信息生产 update、insert、delete语句的模版; 然后根据datatable中记录的行状态,用这3个模版去执行SQL操作因此你仅仅定义一个odbcDataAdapter1,没有select语句,那么不行的,没有OleDbCommandBuilder也是不行的,例子: System.Data.OleDb.OleDbConnection cn; System.Data.OleDb.OleDbCommand cm = new System.Data.OleDb.OleDbCommand(); cm.Connection = cn; System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(cm); cm.CommandText = "select * from table1 where id = 1"; System.Data.OleDb.OleDbCommandBuilder cb = new System.Data.OleDb.OleDbCommandBuilder(da); 然后才能使用da.Update()
其实它只不过是根据select 语句和字段信息生产 update、insert、delete语句的模版;
然后根据datatable中记录的行状态,用这3个模版去执行SQL操作因此你仅仅定义一个odbcDataAdapter1,没有select语句,那么不行的,没有OleDbCommandBuilder也是不行的,例子:
System.Data.OleDb.OleDbConnection cn;
System.Data.OleDb.OleDbCommand cm = new System.Data.OleDb.OleDbCommand();
cm.Connection = cn;
System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(cm);
cm.CommandText = "select * from table1 where id = 1"; System.Data.OleDb.OleDbCommandBuilder cb = new System.Data.OleDb.OleDbCommandBuilder(da);
然后才能使用da.Update()
115 0000E74F2300 曾发国4号 A栋一楼金居堆货点假设有一行有上面三个单元格,用户可能更改每一个单元格,怎么样把用户的更改更新到数据库中?假设把115改为114,0000E74F2300改为1111E74F2300 请写部分源代码!!
谢谢了!!
SqlCommandBuilder cBuilder=new SqlCommandBuilder(SY_departAdapter);
SY_departAdapter.InsertCommand = cBuilder.GetInsertCommand();
SY_departAdapter.DeleteCommand = cBuilder.GetDeleteCommand();
SY_departAdapter.UpdateCommand = cBuilder.GetUpdateCommand();
SqlTransaction transaction1;
SY_Conn.Open();
transaction1 = SY_Conn.BeginTransaction();
SY_departAdapter.InsertCommand.Transaction = transaction1;
SY_departAdapter.DeleteCommand.Transaction = transaction1;
SY_departAdapter.UpdateCommand.Transaction = transaction1;
实现的方法(Eddie005(♂) 暴赱 『零零伍』(︶︵︶) 同)如下:
1 如果用设计器将SqlDataAdapter拖放到界面上使用时,一般不会出现这样的情况
Update(dataSet1,"table1")出错,因为设计器此时已经自动帮你生成SqlDataAdapter相关的
命令属性:selectCommand,insertcommand,updatecommand,deleteCommand,但是如果你没有使用
设计器生成SqlDataAdapter,此时以上的相关命令属性就没有生成,没有被确定,因此如果在更新
过程中,就会出现出错了,因为不知道所做操作的命令对象.
2 解决办法:就是设法产生它的上述命令,使用SqlCommandBuiler类,用他产生上述的命令有两种方
法,方法一:
SqlConnection con = new SqlConnection(conStr);
SqlCommand cmd = new SqlCommand("select * from ....",con);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
SqlCommandBuilder cbuild = new SqlCommandBuilder(da);
da.Update(ds,TableName);
方法二:
SqlConnection con = new SqlConnection(conStr);
SqlCommand cmd = new SqlCommand("select * from ....",con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlCommandBuilder cbuild = new SqlCommandBuilder(da);
da.InsertCommand = cbuild.GetInsertCommand();
da.UpdateCommand = cbuild.GetUpdateCommand();
da.DeleteCommand = cbuild.GetDeleteCommand();
da.Update(ds,TableName);
3 说明如下:
SqlDataAdapter 不会自动生成实现 DataSet 的更改与关联的 SQL Server 实例之间的协调所
需的 Transact-SQL 语句。但是,如果设置了 SqlDataAdapter 的 SelectCommand 属性,则可
以创建一个 SqlCommandBuilder 对象来自动生成用于单表更新的 Transact-SQL 语句。然后,
SqlCommandBuilder 将生成其他任何未设置的 Transact-SQL 语句。 桂林电子工业学院计算机系
信息管理与信息系统
2006.3.29
真是郁闷
http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx