C#学习笔记(五)ADO.net编程

    技术2022-05-11  62

    ADO.net体系结构

    Connection对象:string sConnect;sConnect = string.format("Provider={0};DataSource={1}{2}","Microsoft.Jet.OLEDB.4.0;",System.AppDomain.CurrentDomain.BaseDirectory,"Sale.mdb");

    MSA.OLEDbconnection dbConn;dbConn = new MSA.OleDbConnection(sConnect);dbConn.Open();……

    SWF.MessageBox.Show(dbConn.State.ToString());//显示“Open”。

    Command and Reader对象

    string sql;BankCustomer c;sql="select * from Customers"MSA.OleDbCommand dbCmd;dbCmd = new MSA.OleDbCommand(sql,dbConn);

    MSA.OleDbDataReader dbReader;dbReader = dbCmd.ExecuteReader();

    while(dbReader.Read()){    c = new BandCustomer(dbReader["FirstName"].ToString,dbReader["Lastname"].ToString,System.Convert.ToDecimal(dbReader["AcctBalance"]));    Globals.Customers.Add(c);}

    ADO.net 基于Data Provider。Data Provider 封装基于特定数据库的细节信息。.net可支持多种数据提供者,如SQL Server、Oracle、OleDb、ODBC等。

    不管使用何种数据库,都具有相同的编程模型,但要使用不同的数据库连接字符串,使用不同的名称空间和类。

    连接字符串参考资源:http://www.connectionstrings.com。

    几种访问数据库的方式:

    连接的,读取并读取一个值:ExecuteScalar()连接的,只读,单向:ExecuteReader()连接的,只写:ExecuteNonQuery()非连接的,读/写:DataSets

    为什么使用DataSet?

    DataSet是非连接的记录集,是服务器端填充为结果的数据拷贝;在客户端运行和处理;可以重新连接数据库用于更新数据。好处:减少DB服务器的负担,关闭连接后可以离线工作,对于分布式应用程序是很必要的。

    例如:foreach (System.Data.DataRow row in ds.Tables["Table"].Rows){     ……   }

    写入数据

    通过SQL动作:插入、更新和删除来对数据库进行写操作:

    string sql;int rows;sql= string.Format("Delete from Customers Where...");

    SQL.SqlCommand dbCmd;dbCmd = new SqlCommand(sql,dbConn);

    dbConn.Open();rows = dbCmd.ExecuteNonQuery();dbConn.Close();

    if (rows!=1) throw new System.ApplicationException("Delete failed?!");

    非连接的修改:重新连接数据库后更新。如:SQL.SqlCommandBuilder dbCmdBuilder;dbCmdBuilder = new SQL.SqlCommandBuilder(dbAdapter);

    ds = (System.Data.DataSet) this.dataGrid1.DataSource;

    dbConn.Open();dbAdapter.Update(ds);dbConn.Close();

    注意,非连接更新可能会引起冲突。

    参数化查询:Select FirstName,Lastname from Customers where CID=@CID使用时——

    dbCmd.Parameters.Add("@CID",SqlDbType.BigInt);dbCmd.Parameter[0].Value=1;dbReader = dbCmd.ExecuteReader();

    调用存储过程

    Create PROCEDURE GetCustomer(@CID BigInt) as    Select * from Customers Where CID=@CIDRETURN

    SQL.SqlCommand dbCmd= dbConn.CreateCommand();dbCmd.CommandText = "GetCustomer";dbCmd.CommandType = CommandType.StoredProcedure;dbCmd.Parameters.Add("@CID",SqlDbType.BigInt);dbCmd.Parameters[0].Value=1;dbReader = dbCmd.ExecuteReader();

     

    Transaction中执行查询Connection对象的BeginTransaction来创建一个Transaction对象。SQL.SqlTransaction txn= dbConn.BeginTransaction();string sql= "..."SQL.SqlCommand dbCmd;dbCmd = new SQL.SqlCommand(strSQL,dbConn,txn);int intRecord = dbCmd.ExecteNonQuery();

    if(intRecord==1) {    //成功    txn.Commit();}else{    //失败    txn.Rollback();

    }

    参考资源:《ADO.net技术内幕》 


    最新回复(0)