上一篇介绍了怎么去连接数据库,这次呢,来谈谈在数据库中的一些操作
我们知道,要想获得查询的记录集,仅仅靠DBCommand是无法完成的,因此要借助DataReader来获得所查询的记录。例如:
SqlCommand myComm = new SqlCommand();
myComm.CommandText = “SELECT * FROM UserInfo WHERE UserName = @UserName ”;
myComm.Parameters.Add(
“@UserName”, yourValue );
SqlDataReader myReader = myComm.ExecuteReader();
while( myReader.Read() )
{
myReader.GetValue( index );// Get value through specific index
}
myReader.Close();
myComm.Dispose();
所以在DataReader中比较常见的两个方法,就是Read和GetValue,前者是判断是否读出记录,后者是获得记录中某个字段的值,其返回是object类型对象,需要进行类型转换才能得到想要得字段值。
可惜的是,DataReader每次只能读出一行记录,因此在使用它的时候,查询结果要逐行读取,其间它对DBConnection是独享,即不能在此时刻用同一个DBConnection去做其它的数据库操作。
要提的一点是,在ADO.NET中提供了一个更好的、更方便的数据操作工具,即DataAdapter类。对于一个DataAdapter对象,可以设置四个DBCommand,分别是SelectCommand、InsertCommand、DeleteCommand、UpdateCommand.而这四个DBCommand并不需要全部初始化,主要是看程序的具体要求,如果只是用到查询方面,那么只需要设定一下SelectCommand即可,这和一般的DBCommand操作一样(参看前面的DBCommand部分说明)。
对于DataAdapter操作返回的记录集,需要用DataSet来进行辅助操作,例如:
获得查询的记录集
DataAdapter.Fill( DataSet, “yourTableName” );// “yourTableName” is the name using in data set
更新数据库
DataAdapter.Update( DataSet, “yourTableName” );
此处要注意的是:
1. 首先DataSet要发生变化,如果和Fill之后一样,对数据库则没什么影响;
2. 再者要设置InsertCommand、DeleteCommand、UpdateCommand,如果不设置对应操作语句,则一样对数据库没任何影响。
相对而言,DataAdapter效率要差一些,但是避免了一些操作,读取记录集,对获得记录数据进行类型转换等等。同时其对DBConnection的占有只是在对数据库操作的时候,操作完即立刻释放。因此,强烈建议多使用DataAdapter,而少使用DataReader.
在文章的结尾,要说明的,以上所提到的只是数据库操作的虚类名,如果程序真正操作数据库,则要根据数据库的不同,选择不同子类来建立对象。具体说明如下:
数据库
子类列表
SQL Server
SqlConnection、SqlCommand、SqlDataReader、SqlDataAdapter
Oracle
OracleConnection、OracleCommand、OracleDataReader、racleDataAdapter
其它
OleDbConnection、OleDbCommand、OleDbDataReader、OleDbDataAdapter
注:DataSet与数据库类型无关。
转载于:https://blog.51cto.com/wukaijie/306282