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

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=@CID
RETURN


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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值