System.Data.DataSet mydataset = new System.Data.DataSet();; //定义DataSet
adapter.Fill(mydataset,"notes");
conn.Close();
整个过程分以下几步:
1. 建立数据库连接(我是通过自己的函数,在前面的文章中有代码)
2. 实例化OleDbDataAdapter对象!
3. 建立一个DataSet对象,执行SQL语句得到的表添加到其中
4. 关闭数据库连接
通过上面的步骤就可以使用DataBind将我们得到的数据绑定到特定的控件上了!
下面通过OleDbDataAdapter来执行删除特定的数据库记录!(DELETE)
//删除特定记录,通过string类型的ID删除字段
public Boolean DelNote(string delid)
{
Boolean tempvalue=false;
//连接数据库
try
{
OleDbConnection conn = getConn(); //getConn():得到连接对象
string selectstr = "select * from notes where id=" + delid;
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(selectstr,conn);
//建立OleDbCommandBuilder,必须!
OleDbCommandBuilder mybuilder = new OleDbCommandBuilder(myDataAdapter);
DataSet ds = new DataSet(); //建立DataSet()实例
myDataAdapter.Fill(ds,"notes");
foreach(DataRow dr in ds.Tables["notes"].Rows)
{
if(dr["id"].ToString().Equals(delid))
{
dr.Delete();
}
}
myDataAdapter.Update(ds,"notes");
//假如执行成功,则,返回TRUE,否则,返回FALSE
conn.Close();
tempvalue=true;
}
catch(Exception e)
{
tempvalue=false;
}
finally
{
if (conn.State.ToString() != "Close")
{
conn.Close();
return(tempvalue);
}
}
}
要通过myDataAdapter执行delete操作,我们要有下面的几步:
1. 建立数据库连接(通过:OleDbConnection conn = getConn();)
2. 实例化OleDbDataAdapter对象!此处并没有用delete语句,而是先用select语句把要删除的记录取得
3. 建立一个DataSet对象,并把执行select语句得到的记录添加到其中
4. 建立OleDbCommandBuilder对象! 并让它与我们前面的OleDbDataAdapter对象关联!语句如下:OleDbCommandBuilder mybuilder = new OleDbCommandBuilder(myDataAdapter);
5. 删除DataSet中包含表的特定记录
6. 执行OleDbDataAdapter对象的Update命令更新数据库,语句如下: myDataAdapter.Update(ds,"notes");
7. 关闭数据库连接
上面步骤中的第4步,我们建立了一个OleDbCommandBuilder对象,注意是必须的!!!我们将它和OleDbDataAdapter关联起来,监视RowUpdating事件的发生!在我们删除了指定的记录后,要通过执行OleDbDataAdapter对象的Update命令来更新数据库!
在一些应用中可能需要判断那些数据可以进入数据(增、删、改)的时候就不需要判断一条记录执行一次sql访问了,直接修改detaset.tables 中的数据,完成后DataAdapter.Update 不需要写sql语句, sql访问集中执行速度快.
定义dataset的主键,就可通过主键定位到dataset的某一行,完成修改.
DtaColum[] keys=new Datacolum[1];
key[0]=ds.Tables["notes"].Colum[0];
ds.Tables["notes"].PrimaryKey=keys;
也可以直接从数据库中加载主键,这不会默认完成,必须在填充DataSet之前设置DataAdapter的MissingSchemaAction属性显示的告诉加载主键信息:
myAdapter.MissingSchemaAction=MissingSchemaAction.AddWithKey;
DataEow findRow=ds.Tables["notes"].Rows.Find("目标值");
定位完成后可以删除目标行。
findRow.Delete();
也可一修改目标行.
Rows集合中的每个DataRow对象都具有属性RowSate,可以跟踪此行是否删除、添加、修改,还是未作变动。
修改时会将修改完成的数据记回内存,同时记录RowSate为修改。
删除时运行delete()方法后并没有真正删除该行,而是将RowSate设置为Deleted,调用DateSet的Update()时查找数据库中该行数据,从数据库中删除。
insert时记录RowStae为Insert,Update()时如果插入数据库已有数据会返回,后面其他行不会执行操作。
执行DateSet的AceptChange()时DataSet中的数据会改变,如果是删除行,此时RowSate设置为为Deleted的行将被删除,此时再调用Update()将无法删除这些行,因为Update仅影响在Rows集合中找到的行,遗漏的行被忽略。此问题也使用与Remove()方法。
在修改完成后,仅仅影响Dataset中的数据,存在与内从中。不影响数据库中的数据。调用Update()后才能使DataSet中的内存数据同磁盘上的数据库同步。
更新数据库时即使调用了Update()也仅影响在DataSt集合中包含的行,遗漏的行会被忽略.
其实,上面的结构不仅适合与delete操作,同样适合insert、update操作的,只要我们把上面的第5步改成相应的操作语句就可以的!