microsoft公司的petshop是最好的例子,不妨研究一下

解决方案 »

  1.   

    sjzwinfor,你说的代码在哪里能得到??
      

  2.   

    当然是两个类,连接字符串的不同在MSDN中查一查就行了
      

  3.   

    可以使用中间变量 引用多种类型的连接
    System.Data.IdbConnection 
    将 连接 变量声明为IdbConnection对象
    然后 根据 选择 来 确定使用那个连接
      

  4.   

    同意sjzwinfor(我喜欢c#) 看看petshop的数据库可移植性
    http://www.microsoft.com/china/msdn/library/enterprisedevelopment/builddistapp/Microsoft.NETPetShop3.x-DesignPatternsandArchitectureofthe.NETPetShop.mspx#XSLTsection126121120120
    的数据可可移植性部分
      

  5.   

    重新封装ADO.Net,将它独立成为数据访问层,提供所有类型的数据提供者:
    Sql,OleDb,Odbc,Oracle
    初始化连接时,传入配置文件和连接字符串。
    这样做的话,当数据库迁移时,程序无需更改太多代码,只需修改配置文件和连接字符串。
    我做的程序就是利用自己的一个DataAccess类,很方便
      

  6.   

    使用反射来做反射(System.Activator)也一样,也是一种变量,不过是一种特殊的变量,它可以动态生成类,根据我们的需要动态生成类,就是说用不着使用new关键字来手工生成类了。
    这个类我已经使用,用的地方是自动选择数据库,就是我写的程序可以自动匹配Access数据库和SqlServer数据库。其实就是使用了System.Activator类,根据不同的设定返回不同的OleDbConnection,OleDbCommand或者是SqlConnection,SqlCommand对象。
    这样,根据不同的配置,就可以自动匹配Access数据库或SqlServer数据库了。
      

  7.   

    看看微软的DataAccessApplicationBlock
      

  8.   

    使用DataAccess Block,就是那个SqlHelper.
    不过楼主也可以参考我写的一个类。
    using System;
    using System.Data;
    using System.Data.OleDb;namespace ZZ.DAL
    {
    /// <summary>
    /// AccessDbHelper 的摘要说明。
    /// </summary>
    public class AccessDbHelper
    {
    private static string strConn =  "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=GMS.mdb;Persist Security Info=False;";

    /// <summary>
    /// 获取单个值
    /// </summary>
    /// <param name="strSql"></param>
    /// <returns></returns>
    public static object ExecuteScalar(string strSql)
    {
    object o = null;
    OleDbConnection myConn = new OleDbConnection(strConn);
    OleDbCommand myComm = new OleDbCommand(strSql,myConn);
    try
    {
    myConn.Open();
    o = myComm.ExecuteScalar();
    }
    catch(Exception e)
    {
    e.ToString();
    }
    finally
    {
    myConn.Close();
    }
    return o;
    }
    /// <summary>
    /// 更新数据
    /// </summary>
    /// <param name="strSql"></param>
    public static int ExecuteNonQuery(string strSql)
    {
    int count = -1;
    OleDbConnection myConn = new OleDbConnection(strConn);
    OleDbCommand myComm = new OleDbCommand(strSql,myConn);
    try
    {
    myConn.Open();
    count = myComm.ExecuteNonQuery();
    }
    catch(Exception e)
    {
    e.ToString();
    }
    finally
    {
    myConn.Close();
    }
    return count;
    }
    /// <summary>
    /// 获取数据读取器
    /// </summary>
    /// <param name="strSql"></param>
    public static OleDbDataReader ExecuteReader(string strSql)
    {
    OleDbConnection myConn = new OleDbConnection(strConn);
    OleDbCommand myComm = new OleDbCommand(strSql,myConn);
    myConn.Open();
    return myComm.ExecuteReader(CommandBehavior.CloseConnection);
    }
    /// <summary>
    /// 获取数据集
    /// </summary>
    /// <param name="strSql"></param>
    /// <returns></returns>
    public static DataSet ExecuteDataSet(string strSql)
    {
    DataSet ds = new DataSet();
    OleDbConnection myConn = new OleDbConnection(strConn);
    try
    {
    OleDbCommand myComm = new OleDbCommand(strSql,myConn);
    OleDbDataAdapter myAda = new OleDbDataAdapter(myComm);
    myAda.Fill(ds,"TableName");
    }
    catch(Exception e)
    {
    e.ToString();
    ds = null;
    }
    finally
    {
    myConn.Close();
    }
    return ds;
    }
    }
    }
    上面使用在Access里,在Sql Server上面也类似。