当前位置: 代码迷 >> SQL >> c#施用SqlDataReader
  详细解决方案

c#施用SqlDataReader

热度:56   发布时间:2016-05-05 12:29:20.0
c#使用SqlDataReader

1  DataAdapter对象的常用属性

DataAdapter对象的工作步骤一般有两种,一种是通过Command对象执行SQL语句,将获得的结果集填充到DataSet对象中;另一种是将DataSet里更新数据的结果返回到数据库中。

DataAdapter对象的常用属性形式为 XXXCommand,用于描述和设置操作数据库。使用DataAdapter对象,可以读取、添加、更新和删除数据源中的记录。对于每种操作的执行方式,适配器支持以下4个属性,类型都是Command,分别用来管理数据操作的动作。

?  SelectCommand属性:该属性用来从数据库中检索数据。

?  InsertCommand属性:该属性用来向数据库中插入数据。

?  DeleteCommand属性:该属性用来删除数据库里的数据。

?  UpdateCommand属性:该属性用来更新数据库里的数据。

例如,以下代码能给DataAdapter对象的selectCommand属性赋值。

//连接字符串

SqlConnection conn;

//创建连接对象conn的语句

// 创建DataAdapter对象

SqlDataAdapter da = new SqlDataAdapter;

//DataAdapter对象的SelectCommand属性赋值

Da.SelectCommand = new SqlCommand("select * from user", conn);

//后继代码

同样,可以使用上述方式给其他的InsertCommandDeleteCommandUpdateCommand属性赋值。

当在代码里使用DataAdapter对象的 SelectCommand属性获得数据表的连接数据时,如果表中数据有主键,就可以使用CommandBuilder对象来自动为这个 DataAdapter对象隐形地生成其他3InsertCommandDeleteCommandUpdateCommand属性。这样,在修改数据后,就可以直接调用Update方法将修改后的数据更新到数据库中,而不必再使用InsertCommand DeleteCommandUpdateCommand3个属性来执行更新操作。

2  DataAdapter对象的常用方法

DataAdapter对象主要用来把数据源的数据填充到DataSet中,以及把DataSet里的数据更新到数据库,同样有SqlDataAdapter OleDbAdapter两种对象。它的常用方法有构造函数、填充或刷新DataSet的方法、将DataSet中的数据更新到数据库里的方法和释放资源的方法。

1.构造函数

不同类型的Provider使用不同的构造函数来完成DataAdapter对象的构造。对于SqlDataAdapter类,其构造函数说明如表所示。

SqlDataAdapter类构造函数说明

SqlDataAdapter()

不带参数

创建SqlDataAdapter对象

SqlDataAdapter(

SqlCommand selectCommand)

selectCommand:指定新创建对象的SelectCommand属性

创建SqlDataAdapter对象。用参数selectCommand设置其Select Com- mand属性

SqlDataAdapter(string

selectCommandText,SqlConnection selectConnection)

selectCommandText:指定新创建对象的SelectCommand属性值

selectConnection:指定连接对象

创建SqlDataAdapter对象。用参数selectCommandText设置其Select Command属性值,并设置其连接对象是selectConnection

SqlDataAdapter(string

selectCommandText,String selectConnectionString)

selectCommandText:指定新创建对象的SelectCommand属性值

selectConnectionString:指定新创建对象的连接字符串

创建SqlDataAdapter对象。将参数selectCommandText设置为Select Command属性值,其连接字符串是selectConnectionString

OleDbDataAdapter的构造函数类似SqlDataAdapter的构造函数,如下表所述。

OleDbDataAdapter类构造函数说明

OleDbDataAdapter()

不带参数

创建OleDbDataAdapter对象

OleDbDataAdapter(

OleDbCommand selectCommand)

selectCommand:指定新创建对象的SelectCommand属性

创建OleDbDataAdapter对象。用参数selectCommand设置其SelectCommand属性

OleDbDataAdapter(string

selectCommandText, OleDbConnection selectConnection)

selectCommandText:指定新创建对象的SelectCommand属性值

selectConnection:指定连接对象

创建SqlDataAdapter对象。用参数selectCommandText设置其SelectCommand属性值,并设置其连接对象是selectConnection

OleDbDataAdapter(string

selectCommandText,String selectConnectionString)

selectCommandText:指定新创建对象的SelectCommand属性值

selectConnectionString:指定新创建对象的连接字符串

创建OleDbDataAdapter对象。将参数selectCommandText设置为SelectCommand属性值,其连接字符串是selectConnectionString

2. Fill类方法

当调用Fill方法时,它将向数据存储区传输一条 SQL SELECT语句。该方法主要用来填充或刷新DataSet,返回值是影响DataSet的行数。该方法的常用定义如表所示。

  DataAdapter类的Fill方法说明

int Fill (DataSet dataset)

dataset:需要更新的DataSet

根据匹配的数据源,添加或更新参数所指定的DataSet,返回值是影响的行数

int Fill (DataSet
dataset,string srcTable)

dataset:需要更新的DataSet

srcTable:填充DataSetdataTable

根据dataTable名填充DataSet

3. int Update(DataSet dataSet)方法

当程序调用 Update方法时,DataAdapter将检查参数DataSet每一行的RowState属性,根据RowState属性来检查DataSet里的每行是否改变和改变的类型,并依次执行所需的INSERTUPDATEDELETE语句,将改变提交到数据库中。这个方法返回影响DataSet的行数。更准确地说,Update方法会将更改解析回数据源,但自上次填充 DataSet以来,其他客户端可能已修改了数据源中的数据。若要使用当前数据刷新 DataSet,应使用 DataAdapter Fill 方法。新行将添加到该表中,更新的信息将并入现有行。Fill方法通过检查 DataSet中行的主键值及 SelectCommand返回的行来确定是要添加一个新行还是更新现有行。如果 Fill方法发现 DataSet中某行的主键值与 SelectCommand返回结果中某行的主键值相匹配,则它将用 SelectCommand返回的行中的信息更新现有行,并将现有行的 RowState设置为 Unchanged。如果 SelectCommand返回的行所具有的主键值与 DataSet中行的任何主键值都不匹配,则 Fill方法将添加 RowState Unchanged的新行。

3  DataAdapter对象代码示例

下面的代码将说明如何利用DataAdapter对象填充DataSet对象。

private static string strConnect = "data source=localhost; uid=sa;pwd=aspnet;database=LOGINDB"

string sqlStr =" Select * from USER";

//利用构造函数,创建DataAdapter

SqlDataAdapter da = new SqlDataAdapter(sqlStr,strConnect);

//创建DataSet

DataSet ds = new DataSet();

//填充,第一个参数是要填充的dataset对象,第二个参数是填充datasetdatatable

Da.Fill(ds, "USER");

上述代码使用DataApater对象填充DataSet对象的步骤如下。

(1) 根据连接字符串和SQL语句,创建一个SqlDataAdapter对象。这里,虽然没有出现ConnectionCommand对象的控制语句,但是 SqlDataAdapter对象会在创建的时候,自动构造对应的SqlConnectionSqlCommand对象,同时根据连接字符串自动初始化连接。要注意的是,此时SqlConnectionSqlCommand对象都处于关闭状态。

(2) 创建DataSet对象,该对象需要用DataAdapter填充。

(3) 调用DataAdapterFill方法,通过DataTable填充DataSet对象。由于跟随DataAdapter对象创建的Command里的SQL语句是访问数据库里的USER表,所以在调用Fill方法的时候,在打开对应的SqlConnectionSqlCommand对象后,会用 USER表的数据填充创建一个名为USERDataTable对象,再用该DataTable填充到DataSet中。

下面的代码演示了如何使用DataAdapter对象将DataSet中的数据更新到数据库。

private static string strConnect = "data source=localhost; uid=sa;pwd=aspnet;database=LOGINDB"

string sqlStr = "Select * from USER";

//利用构造函数,创建DataAdapter

SqlDataAdapter da = new SqlDataAdapter(sqlStr,strConnect);

//创建DataSet

DataSet ds = new DataSet();

//填充,第一个参数是要填充的dataset对象,第二个参数是填充datasetdatatable

Da.Fill(ds, "USER");

//以下代码将更新DataSet里的数据

//DataSet里的名为"USER"DataTable里添加一个用于描述行记录的DataRow对象

DataRow dr = ds.Tables["USER"].NewRow();

//通过DataRow对象添加一条记录

dr["USERID"] = "ID2";

dr["USERNAME"] =  "TOM";

ds.Table["USER"].Rows.Add(dr);

//更新到数据库里

SqlCommandBuilder scb = new SqlCommandBuilder(da);

da.update(ds, "USER");

在上述代码里,首先使用DataAdapter填充DataSet对象,然后通过DataRow对象,向 DataSet添加一条记录,最后使用DataSetupdate方法将添加的记录提交到数据库中。执行完update语句,数据库USER中就多了一条USERIDID2USERNAMETOM的记录。

此外,上述代码出现的SqlCommandBuilder对象用来对数据表进行操作。用了这个对象,就不必再繁琐地使用DataAdapterUpdataCommand属性来执行更新操作。