9/12/2013
9/02/2013
[Enterprise Library] Data Access Application Block - NonQuery
1. 在未使用 Enterprise Library 之前原本的做法
App.config
public void InsertCust1(String connName) { string sql = @"INSERT INTO CUSTOMERS (customerid, companyname, contactname, contacttitle, " + "address, city, region, postalcode, country, phone, fax) " + "VALUES (:a,:b,:c,:d,:e,:f,:g,:h,:i,:j,:k) "; String connString = ConfigurationManager.ConnectionStrings[connName].ConnectionString; using (OracleConnection connection = new OracleConnection(connString)) { connection.Open(); OracleTransaction trans = connection.BeginTransaction(); try { OracleCommand cmd = connection.CreateCommand(); cmd.CommandText = sql; cmd.CommandType = CommandType.Text; cmd.Transaction = trans; for (int i = 97; i < 108; i++) { char c = (char)i; cmd.Parameters.Add(":" + c, c); } cmd.ExecuteNonQuery(); trans.Commit(); } catch { trans.Rollback(); } } }2. 使用 Enterprise Library 後, 程式碼沒有精簡很多, 但可避免程式碼和特定資料庫的 connection 實作產生依賴, 仍值得一用
public void InsertCust2(String connName) { string sql = @"INSERT INTO CUSTOMERS (customerid, companyname, contactname, contacttitle, " + "address, city, region, postalcode, country, phone, fax) " + "VALUES (:a,:b,:c,:d,:e,:f,:g,:h,:i,:j,:k) "; Database db = DatabaseFactory.CreateDatabase(connName); using (DbConnection dbConnection = db.CreateConnection()) { dbConnection.Open(); DbTransaction trans = dbConnection.BeginTransaction(); try { DbCommand cmd = dbConnection.CreateCommand(); cmd.CommandText = sql; cmd.CommandType = CommandType.Text; for (int i = 97; i < 108; i++) { char c = (char)i; db.AddInParameter(cmd, ":" + c, DbType.String, c); } db.ExecuteNonQuery(cmd, trans); trans.Commit(); } catch { trans.Rollback(); } } }
App.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <connStrings> <add name="testdb" connString="Data Source=test;User Id=testdb;Password=testdb;" providerName="Oracle.DataAccess.Client" /> </connStrings> </configuration>
Subscribe to:
Posts (Atom)