ADO.NET: 数据库编程
2013-11-20 16:40 Huxiaoxia 阅读(327) 评论(0) 编辑 收藏 举报建立简单数据库程序
1.打开数据库连接
ADO.NET connection 对象:
using SD=system.Date; using MSA= system.Date.OleDb; using SWF=system.windows.Forms; . . . string sConnect; sConnect = string.Format(“Provider = {0}; Data Source= {1}{2}”, ”Provider = Microsoft.Jet.OLEDB.4.0”,system.AppDomain.CurrentDomain.BaseDirectory, “Sales.mdb”); MSA.oleDbConnection dbConn; dbConn = new MSA.oleDbConnection(sConnect); dbConn = Open(); SWF.MessageBox.Show(dbConn.State.ToString() );
2.执行查询语句并取回记录
command and reader 对象:
3.关闭数据库连接
关闭reader 和 connection
dbReader.Close(); dbConn.Close(); SWF.MessageBox.Show( dbConn.State.ToString() );
异常处理
使用try-catch-finally 来保证收尾工作
数据库关闭,资源被释放等等
对象模型
不同数据库之间
"相同"的编程模型,不管使用何种数据库
不同的数据库连接字符串
不同的名称空间和类:
system.data.sqlclient.SqlConnection system.data.oracleClient.OracleConnection system.data.Odbc.OdbcConnection etc
Connection 字符串格式
Connection string 对于不同的数据库来说是不同的,格式是数据库提供厂商定义的。
现在还没有一个很好的文档包括所有的格式。
Executive 概要
几种访问数据库的方式:
Execute scalar:只返回一个值
string sql; sql = string.Format(“select AcctBalance Form Customers where CID={0}”,cid) SQL.SqlCommand dbCmd; dbCmd = new SQL.SqlCommand(sql, dbConn); decimal balance; balance = system.Convert.ToDecimal( dbCmd.ExecuteScalar() );
ExecuteReader :产生一个 datereader对象
DataReader = forward-only,read-only cursor
没关闭之前都保持数据库的连接
string sql = “select * from customers”; SQL.SqlCommand dbCmd = new SQL.SqlCommand( sql, dbConn); SQL.SqlDataReader dbReader = dbCmd.ExecuteReader(); while ( dbReader.Read() ) (…)
datasets:另一个.NET集合类
特别适合像表格形式存储数据
简单填充,传递,显示在GUI中
datesets = 非连接的记录集
DataSet 是服务器端填充为结果的数据拷贝
DataSet 在客户端运行和处理
DataSet 可以重新连接数据库用于更新数据
好处:减少DB服务器的负担;关闭连接后离线工作
对于分布式程序是非常重要的。。
DataSets 允许非连接的修改,客户端应用程序重新连接后更新
读取并填充 DataSet
使用DataAdapter 对象,当DataSet被填充之后,与数据库服务器的连接就关闭了!
string sql = “Select * From Customers;” SQL.SqlCommand dbCmd = new SQL.SqlCommand(sql, dbConn); SQL.SqlDataAdapter dbAdapter = new SQL.SqlDataAdapter( dbCmd ) System.Data.DataSet ds; ds = new System.Data.DataSet(); dbConn.Open(); dbAdapter.Fill(ds); dbConn.Close();
foreach record..
绑定到DataGrid
DataSet 可以被绑定到DataGrid控件
this.dataGrid1.SetDataBinding(ds, “Table”);
DataSets 像数据库
无限制的表空间
可以被查询,排序,更新
支持视图,关系,约束
ExecuteNonQuery:写入数据库
通过SQL动作:插入,更新和删除来对数据库进行写操作
string sql; int row; sql = string.Format(“Delete From Customers where…”); SQL.SqlCommand dbCmd; dbCmd = new SQL.sqlCommand(sql, dbConn); dbConn.Open(); rows = dbCmd.ExecuteNonQuery(); dbConn.close(); if(rows != 1 ) throw new system.ApplicationException(“Delete failed?!”);
参数化查询
参数化的形式
select FirstName,LastName from Customers where CID =@CID; sql = “Select * from Customers Where CID = @CID order by LastName Asc, FirstName Asc“; SQL.SqlCommand dbCmd; dbCmd = new SQL.SqlCommand(sql,dbConn); dbComd.Parameters.Add(“@CID”,sqlDbType.BigInt); dbCmd.Parameters[0].Value = 1; dbReader = dbCmd.ExecuteReader();
SQL Server 中的存储过程
create PROCEDURE GetCustomer (@CID BigInt ) as select FirstName,LastName,AcctBalance from customers where CID = @CID RETURN SQL.SlCommand dbCmd = dbConn.CreateCommand(); dbCmd.CommandText = “GetCustomer”; dbCmd.CommandType = CommandType.StoreProcedure; dbCmd.Parameters.Add(“@CID”,SqlDbTypr.BigInt); dbCmd.Parameters[0].Value = 1 ; dbReader = dbCmd.ExecuteReader();
Transaction 中执行查询
Command 对象的Begin Transaction 来创建一个Transaction 对象
SQL.SqlTransaction txn = dbConn.BegionTransaction() string strSQL = “INSERT INTO Customers values(100,’小牛’,’言’,100000000,100000000,’01-Jan-2005’,’money’)”; SQL.SqlCommand dbCmd; dbCmd = new SQL.SqlCommand(strSQL,dbConn,txn); int intRecord=dbCmd.ExecuteNonQuery(); if (intRecord == 1) { SWF.MessageBox.Show(“Update Successful”); txn.Commit(); } else { SWF.MessageBox.Show(“Update Failed”); txn.Rollback(); }