建立简单数据库程序
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( );
ExecuteReader :产生一个 datereader对象
DataReader = forward-only,read-only cursor
没关闭之前都保持数据库的连接
string sql = “select * from customers”;
SQL.SqlCommand dbCmd = new SQL.SqlCommand( sql, dbConn);
SQL.SqlDataReader dbReader =
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
dbConn.Open();
dbAdapter.Fill(ds);
dbConn.Close();
foreach record..
绑定到DataGrid
DataSet 可以被绑定到DataGrid控件
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.
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();
}