ASP.NET C# 访问Access、Xml等数据库

 

  1. 简介
    1. 目前主流的数据库是SQL2008 、SQL2012了等等,从一开始我们接触的也是这些RDMS数据库管理系统,似乎认为Access、SQL2000等已经没有什么用处,其实,它们用处也非常大。
    2. 比如Access比较轻便、易用,如果你的系统需用不了太多的表以及表之间的关系,或者说数据库表结构设计不是特别复杂,你可以试试用Access数据库。
  1. Office 集成了Access
    1. 这个数据库并不需要我们安装,它集成在了Office 里,我们都知道只要是电脑一般都安装了微软的Office办公软件,如果再给客户部署系统时,就可以不需要安装大的数据库管理软件,会很方便的安装。
  1. 连接例子
    1. 下面是C#连接Access数据库文件的代码,采用了三层结构,其实,很简单只需要引入System.Data.OleDb命名空间即可,其余的地方同连接SQL Server数据库一样。
    1. 代码
        1. <span style=”font-size:18px;”>//DAL层
        2. using System;
        3. using System.Collections.Generic;
        4. using System.Linq;
        5. using System.Text;
        6. using System.Data;
        7. using Entity;
        8. using System.Data.OleDb;
        9. namespace DAL
        10. {
        11.     public class ProductDAO
        12.     {
        13.         //调用D层的方法
        14.         public DataTable QueryProductByCa(CagetoryEntity enCagetory)
        15.         {
        16.             string SQL = “SELECT * FROM Product WHERE CagetoryID=@CaID”;
        17.             //查询参数
        18.             OleDbParameter[] parms =
        19.             {
        20.                 new OleDbParameter(“@CaID”, enCagetory.ID)
        21.             };
        22.             return new SQLHelper().ExecuteQuery(SQL, parms, CommandType.Text);
        23.         }
        24.     }
        25. }
        26. //SQL层
        27. using System;
        28. using System.Collections.Generic;
        29. using System.Linq;
        30. using System.Text;
        31. using System.Data;
        32. using System.Data.OleDb;
        33. using System.Data.SqlClient;
        34. using System.Configuration;
        35. using System.Configuration.Assemblies;
        36. namespace DAL
        37. {
        38.     public class SQLHelper
        39.     {
        40.         private OleDbCommand cmd = null;
        41.         private OleDbConnection con = null;
        42.         private OleDbDataReader sdr = null;
        43.         #region 构造方法
        44.         /// <summary>
        45.         /// 构造函数
        46.         /// </summary>
        47.         public SQLHelper()
        48.         {   //连接字符串,从配置文件获取
        49.             string strConn = ConfigurationManager.ConnectionStrings[“mydb”].ConnectionString;
        50.             con = new OleDbConnection(strConn);
        51.         }
        52.         #endregion
        53.         #region 获得数据库连接
        54.         /// <summary>
        55.         /// 获得数据库连接
        56.         /// </summary>
        57.         private OleDbConnection GetCnn()
        58.         {
        59.             if (con.State == ConnectionState.Closed)
        60.             {
        61.                 con.Open();
        62.             }
        63.             return con;
        64.         }
        65.         #endregion
        66.         #region 执行带参数的查询命令
        67.         /// <summary>
        68.         /// 执行带参数的查询命令
        69.         /// </summary>
        70.         /// <param name=”cmmText”>Sql语句或存储过程</param>
        71.         /// <param name=”para”>参数集合</param>
        72.         /// <param name=”cmmType”>命令类型</param>
        73.         public DataTable ExecuteQuery(string cmmText, OleDbParameter[] para, CommandType cmmType)
        74.         {
        75.             DataTable dt = new DataTable();
        76.             cmd = new OleDbCommand(cmmText, GetCnn());
        77.             cmd.CommandType = cmmType;
        78.             cmd.Parameters.AddRange(para);
        79.             using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
        80.             {
        81.                 dt.Load(sdr);
        82.                 return dt;
        83.             }
        84.         }
        85.         #endregion
        86.     }
        87. }
        88. </span>

        配置文件连接字符串

        1. <span style=”font-size:18px;”>  <!–连接数据库字符串–>
        2.   <connectionStrings>
        3.     <!–<add name=”ConnectString” connectionString=”server=LLS;database=NutProduct;uid=sa;pwd=123456;” providerName=”System.Data.SqlClient”/>–>
        4.     <add name=”mydb” connectionString=”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Nut.mdb” providerName=”System.Data.OleDb”/>
        5.   </connectionStrings></span>

        说明

      1. App_Data文件,从vs2005版以后是自动加入的一个数据库文件夹,默认在这个文件夹下面的文件对于用户是只读的,当程序发布之后,不可以下载里面的东西,起到保护数据作用。
  1. 设计模式(抽象工厂)
    1. 在连接数据库我们可以利用抽象工厂模式结局更换数据库的问题,不需要过多的修改源码,如果一点也不改也是不现实的,修改也是相对的,尽可能把修改的范围、大小降低到最小即可。
    2. 工厂模式可以把连接数据库的D层换了,我们可以把分别连接SQL、Access数据库的类,编译成DLL文件,当我们再需要换数据库时,只需要在Web.config配置文件里面改变连接字符串。
    3. 连接不通的数据库,它们的本质类都在System.Data命名空间下。System.Data 命名空间提供对表示 ADO.NET 结构的类的访问。
      1. ADO.NET中核心是DataSet类,还有其它一些类、接口,实现对该类的辅助操作,不通的数据源都实现了同一个父抽象类,它们都有一个每个数据提供程序都有相应的 DataAdapter,可用作数据源和 DataSet 之间的桥梁。
      2. 例如:通过使用 System.Data.SqlClient 命名空间(用于 SQL Server 的 .NET Framework 数据提供程序)、System.Data.Odbc 命名空间(用 ODBC 的 .NET Framework 数据提供程序)、System.Data.OleDb 命名空间(用于 OLE DB 的 .NET Framework 数据提供程序)或 System.Data.OracleClient 命名空间(用于 Oracle 的 .NET Framework 数据提供程序),可以访问数据源从而用于 DataSet。
  1. 另外,我们还可以利用XML、Excel等等,保存数据,它们都有自己的优点,需要根据需要进行选择。

标签