的时候,DataAdapter再将更新后的数据搬回给数据库(即对数据库进行更新)。
我们可以通过三种方法来创建DataAdapter对象(参考)
1、通过数据库连接字符串和查询语句来创建:
string strConn,cmdText;
strConn="server=192.168.24.123;database=DataBaseName;uid=sa;pwd=123456";
cmdText="select * from TableName";
SqlDataAdapter sda=new SqlDataAdapter(cmdText,strConn);
通过观察下面第二种方法就会发现,这种方法有个缺点,如果系统中需要创建多个SqlDataAdapter对象的话,在每次创建SqlDataAdapter对象时,都会“隐式”创建一个SqlConnection对象。
2、通过SqlConnection对象来创建:
string strConn,cmdText;
strConn="server=192.168.24.123;database=DataBaseName;uid=sa;pwd=123456";
cmdText="select * from TableName";
SqlConnection conn=new SqlConnection(strConn);
SqlDataAdapter sda=new SqlDataAdapter(cmdText,conn);
这种方法与第一种方法唯一区别就是多创建了一个SqlConnection对象,这样做的好处是,如果需要再次创建多个SqlDataAdapter对象,只需要改变查询语句cmdText就行,第二个参数还可以使用同一个SqlConnection对象conn,节省系统资源。
3、通过SqlCommand对象来创建:
string strConn,cmdText;
strConn="server=192.168.24.123;database=DataBaseName;uid=sa;pwd=123456";
cmdText="select * from TableName";
SqlConnection conn=new SqlConnection(strConn);
SqlCommand cmd=new SqlCommand(cmdText,conn);
SqlDataAdapter sda=new SqlDataAdapter(ccmd);
更多关于SqlDataAdapter的细节可参考:SqlDataAdapter对象
【DataSet与DataTable】
上面说到的DataReader与SqlCommand一块使用,只能“读取”数据,而无法保存。DataSet可以被认为是内存中的“数据库”,也可以说是数据表的集合。在与SqlDataAdapter断开连接的情况下,DataSet提供了和关系数据库一样的关系数据模型。DataSet由一个或多个表组成,这些表就是DataTable,数据库表DataTable则由DataRow和DataColumn组成。
下面写一个遍历DataSet的并输出例子(对DataSet写入也是同样的道理):
DataSet ds=new DataSet(); //实例化DataSet
//…… //查询操作(填充DataSet)
DataTable dt=ds.Tables[0]; //获取DataSet的第一张表(注意第一张表下标为0)
//遍历行
foreach(DataRow dr in dt.Rows)
{
//遍历列
for(int i=0;i");
}
小结:
再次引用一下这张图:

SqlDataReader通常和SqlCommand一同使用,常用语简单浏览并且耗时较短的数据库操作。
DataSet长与SqlDataAdapter一同使用,DataSet会将所需数据读取到内存然后断开与SqlDataAdapter的连接,在本地内存进行操作,如需更新时在重新通过SqlDataAdapter刷新数据库。
同时,SqlDataReader、DataSet、DataTable都可以当做数据源直接赋值给某些控件的DataSource属性。