代码改变世界

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 对象:

1

 

3.关闭数据库连接

   关闭reader 和 connection

dbReader.Close();

dbConn.Close();


SWF.MessageBox.Show( dbConn.State.ToString() );

 

异常处理

  使用try-catch-finally 来保证收尾工作

     数据库关闭,资源被释放等等

2

 

对象模型

不同数据库之间

   "相同"的编程模型,不管使用何种数据库

    不同的数据库连接字符串

    不同的名称空间和类:

     system.data.sqlclient.SqlConnection

     system.data.oracleClient.OracleConnection

     system.data.Odbc.OdbcConnection

     etc

3

Connection 字符串格式

Connection string 对于不同的数据库来说是不同的,格式是数据库提供厂商定义的。

现在还没有一个很好的文档包括所有的格式。

 

Executive 概要

几种访问数据库的方式:

4

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中

5

datesets = 非连接的记录集

   DataSet 是服务器端填充为结果的数据拷贝

   DataSet 在客户端运行和处理

   DataSet 可以重新连接数据库用于更新数据

好处:减少DB服务器的负担;关闭连接后离线工作

对于分布式程序是非常重要的。。

DataSets 允许非连接的修改,客户端应用程序重新连接后更新

8

读取并填充 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..

6

绑定到DataGrid

DataSet 可以被绑定到DataGrid控件

this.dataGrid1.SetDataBinding(ds, “Table”);

DataSets 像数据库

无限制的表空间

可以被查询,排序,更新

支持视图,关系,约束

7

 

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();

}