7,更新数据库
本例中给出一个非常简单的示例,此示例仅使用了一个表,同时引入后面才会介绍的几个新对象。
在数据库上进行的操作(更新,插入,删除)可以用相同的模式完成。
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data; //注意
using System.Data.OracleClient; //Oracle数据库
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
OracleConnection thisConnection = new OracleConnection(@"Data Source=orcl;User ID=shibei;Password=nsic;Unicode=True");
OracleDataAdapter thisAdapter = new OracleDataAdapter("select * from N_AIT", thisConnection);
OracleCommandBuilder thisBuilder = new OracleCommandBuilder(thisAdapter);//CommandBuilder用来创建SQL指令,与Adapter相关联
DataSet thisDataSet = new DataSet();
thisAdapter.Fill(thisDataSet, "MY_N_AIT");//MY_N_AIT不是表名而是DataTable对象的名称
Console.WriteLine("Name before change:{0}", thisDataSet.Tables["MY_N_AIT"].Rows[4]["NAME"]);
thisDataSet.Tables["MY_N_AIT"].Rows[4]["NAME"] = "被我改了";//数据被修改
thisAdapter.Update(thisDataSet, "MY_N_AIT");//SQL的指令时靠CommandBuilder来完成的,这要求建立Adapter的查询语句中的字段
//必须有主键,如果没有的话这样执行就抛出异常了。
thisConnection.Close();//这个例子中没有明确打开连接,因为DataAdapter对象完成了这个工作,
//数据授权对象会根据需要打开连接,在完成工作后关闭它。
//DataAdapter对象不改变连接的状态,如果DataAdapter对象开始其工作前连接时打开的,
//在DataAdapter对象完成其工作后,连接仍是打开的。( 不懂既然DataAdapter来处理为什么不改变连接的状态)
}
}
}
运行结果:
注意:利用OracleCommandBuilder产生SQL语句,但是表中必须要有主键,否则会抛出异常。采用直接执行SQL命令可以解决。