Hi Boy,
我现在需要使用asp.net操作access数据库,你来做个。boy听后就开始百度了,最后找到了一个比较好的方法。如下:
C# Code
1
2 3 4 5 6 7 |
<appSettings>
<!-- 连接字符串是否加密 --> <add key= "ConStringEncrypt" value= "false" /> <!-- access 连接字符串--> <add key= "ConnectionString" value= "provider=microsoft.jet.oledb.4.0;data source=" /> <add key= "dbPath" value= "~/App_Data/ems.mdb" /> </appSettings> |
后端代码:
C# Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
string
connectionString = ConfigurationManager.AppSettings[ "ConnectionString" ].ToString()+ HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings[ "dbPath" ]); OleDbConnection conn = new OleDbConnection(connectionString); try { conn.Open(); string sql = "select * from Table" ; OleDbDataAdapter myadapter = new OleDbDataAdapter(sql, conn); DataSet ds = new DataSet(); myadapter.Fill(ds); } catch (Exception ee){} finally { conn.Close(); } |
“恩,不错!”manager说,“但是你希望每次操作数据库都要这么写吗?新建一个Connection对象,新建一个Command,然后对数据库操作?”
Boy,Think......之后有了如下代码:
C# Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public
class
Common{ ...... public static DataSet Query( string sql){ using (OleDbConnection connection = new OleDbConnection(connectionString)){ DataSet ds = new DataSet(); try { connection.Open(); OleDbDataAdapter myadapter = new OleDbDataAdapter(sql, connection); DataSet ds = new DataSet(); myadapter.Fill(ds); } catch (System.Data.OleDb.OleDbException ex){ throw new Exception(ex.Message); } return ds; } } public static int ExecuteNonQuery( string ){ ...... } } |
“恩,不错,这样每次操作只需要调用Common类的Query方法了,大大的简化了数据库的操作。”manager说道。
Boy心中非常高兴,听到赞赏。
“但是,这个还是存在着问题。”manager说道,“什么问题”,Boy疑惑的问道。
“你看这段代码,”
C# Code
1
2 3 4 5 |
DataTable dt = ...;(假设这里datatable有100条数据)
for ( int i= 0 ;i<dt.Rows.Count;i++){ string sql = "" ; Common.ExecuteNonQuery(sql); //这里做更新操作 } |
“你看这段代码,执行100次更新操作,就执行(新建Connection对象,Command对象...)这种操作了100次,期间新建,销毁这些对象了100次。就是说,随着对数据库的操作次数的提升,付出的性能代价就越大。明白吗?”,manager问道。
Boy陷入了沉思中......