对数据库的更新,无非就是执行INSERT、UPDATE、DELETE语句,这些语句可以由DataAdapter对象来自动生成,这种情况下DataAdapter会扫描DataSet中的表,找出被修改、删除、新增的行,并生成相应的SQL语句。这种方法虽然简单,但是效率较低。
另一种方法就是我们自己指定SQL语句,不需要DataAdapter对象生成,这样做可以提高程序执行效率,但是实现起来稍微繁琐一些。
1、 由DataAdapter对象来自动生成更新语句,需要生成一个CommandBuilder对象。
另外,要求表中必须存在唯一主键列,否则不能自动生成更新语句。
string connStr = "…… ";
string selectStr = "SELECT * FROM TableName";
OracleConnection conn = new OracleConnection(connStr);
OracleCommand cmd = new OracleCommand(selectStr, conn);
OracleDataAdapter ada = new OracleDataAdapter(cmd);
/*
在使用DataAdapter的Fill方法填充DataSet对象时,如果想要使Fill建立的表包含主键信息、唯一约束、列属性、是否允许空值、列的最大长度、只读列、自动增加列等等,只需要指定DataAdapter.MissingSchemaAction为MissingSchemaAction.AddWithKey。
*/
ada.MissingSchemaAction = MissingSchemaAction.AddWithKey;
OracleCommandBuilder myCommmandBuilder = new OracleCommandBuilder(ada);
DataSet ds = new DataSet();
ada.Fill(ds, "TableName");
// 更新数据
ds.Tables["TableName "].Rows[lineNum]["FieldName"] = SomeValue;
// 插入行
DataRow dr = ds.Tables["TableName"].NewRow();
dr.BeginEdit();
dr["fieldName"] = SomeValue;
……
dr.EndEdit();
//删除行
this.Tables["TableName"].Rows[“PrimaryKey Value”].Delete();
ada.UpdateData(ds, “TableName”);
ds.AcceptChanges();
在对DataSet中的Table进行修改后,被修改的行会设置RowState属性来标志改行的状态,RowState有五种状态,它们是Added、Deleted、Modified、Detached和Unchanged。在将修改后的数据提交到数据库后,应该调用AcceptChanges方法来将RowState属性设置为“未修改”状态,否则在下次提交更新的时候以前更新会被重复提交。
上一篇:asp.net基础 执行存储过程
下一篇:asp.net手动指定SQL语句