上一篇介绍了怎么去连接数据库,这次呢,来谈谈在数据库中的一些操作
 
    我们知道,要想获得查询的记录集,仅仅靠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与数据库类型无关。