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条数据)
;i<dt.Rows.Count;i++){ string sql =""; Common.ExecuteNonQuery(sql);//这里做更新操作 } |
“你看这段代码,执行100次更新操作,就执行(新建Connection对象,Command对象...)这种操作了100次,期间新建,销毁这些对象了100次。就是说,随着对数据库的操作次数的提升,付出的性能代价就越大。明白吗?”,manager问道。
Boy陷入了沉思中......