我用了一个类项目,里面写了一个dbhelper  ,然后default页引用 dbhleper 实现repeater 的数据绑定,现在的问题是,需要加一个接口项目,default页通过接口调用方法。我不知道如何操作,怎么个思路,有大侠给个建议吗?
我原来的 default页的代码 是 
namespace web
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           getBind();
    }
    private void getBind()
        {                        string SQL_SELECT_USER = "SELECT [id],[title],[n_content],[datetime] FROM [news]";            DataSet ds = db.ExecuteDataSet(SQL_SELECT_USER);
            Repeater.DataSource = ds.Tables[0];
            Repeater.DataBind();
           
    }
        
    }
}原来的 dbhelper的代码,简短贴下。
namespace SQLServerDAL
{
    /// <summary>
    /// 用来创建DataBase对象的静态类
    /// </summary>
    public static class DBHelper
    {
        public static DataBase CreateData(string DataNameInConfigfile)
        {
            string pn = ConfigurationManager.ConnectionStrings[DataNameInConfigfile].ProviderName;  //读取配置文件
            string cs = ConfigurationManager.ConnectionStrings[DataNameInConfigfile].ConnectionString;            //下面判断数据库类型并创建相应的对象            if (pn.ToUpper().Contains("OLEDB"))
            {
                OleDbDataAdapter oledbda = new OleDbDataAdapter();
                oledbda.SelectCommand = new OleDbCommand();
                oledbda.SelectCommand.Connection = new OleDbConnection(cs);
                return new DataBase(oledbda);
            }
            if (pn.ToUpper().Contains("SQL"))
            {
                SqlDataAdapter sqlda = new SqlDataAdapter();
                sqlda.SelectCommand = new SqlCommand();
                sqlda.SelectCommand.Connection = new SqlConnection(cs);
                return new DataBase(sqlda);
            }
            if (pn.ToUpper().Contains("ODBC"))
            {
                OdbcDataAdapter odbcda = new OdbcDataAdapter();
                odbcda.SelectCommand = new OdbcCommand();
                odbcda.SelectCommand.Connection = new OdbcConnection(cs);
                return new DataBase(odbcda);
            }
            return null;
        }        public static DataBase CreateData(string ConnectionString, string ProviderName)
        {
            //以下判断数据库类型并创建相应的对象
            if (ProviderName.ToUpper().Contains("OLEDB"))
            {
                OleDbDataAdapter oledbda = new OleDbDataAdapter();
                oledbda.SelectCommand = new OleDbCommand();
                oledbda.SelectCommand.Connection = new OleDbConnection(ConnectionString);
                return new DataBase(oledbda);
            }
            if (ProviderName.ToUpper().Contains("SQL"))
            {
                SqlDataAdapter sqlda = new SqlDataAdapter();
                sqlda.SelectCommand = new SqlCommand();
                sqlda.SelectCommand.Connection = new SqlConnection(ConnectionString);
                return new DataBase(sqlda);
            }
            if (ProviderName.ToUpper().Contains("ODBC"))
            {
                OdbcDataAdapter odbcda = new OdbcDataAdapter();
                odbcda.SelectCommand = new OdbcCommand();
                odbcda.SelectCommand.Connection = new OdbcConnection(ConnectionString);
                return new DataBase(odbcda);
            }
            return null;
        }
    }    /// <summary>
    /// 执行主要操作的类
    /// </summary>
    public class DataBase
    {
        private DbDataAdapter mDataAdapter; //指向传入的DbDataAdapter的引用
        private DbCommand mCommand;  //指向传入的DbDataAdapter.SelectCommand的引用        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="DDA">获得一个实例化了的DbDataAdapter的派生类</param>
        public DataBase(DbDataAdapter DDA)
        {
            mDataAdapter = DDA;
            mCommand = DDA.SelectCommand;
        }        /// <summary>
        /// 判断一个stirng是否为储存过程
        /// </summary>
        /// <param name="SQLText">目标string</param>
        /// <returns>返回是否为储存过程的调用</returns>
        private bool IsProcedure(string SQLText)
        {
            if (SQLText.Contains(" "))
            {
                string[] tmp;
                tmp = SQLText.Split(' ');
                if (tmp[0].ToUpper() == "EXECUTE" || tmp[0].ToUpper() == "EXEC")
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return true;
            }
        }        /// <summary>
        /// 执行数据库命令返回受影响的行数
        /// </summary>
        /// <param name="SQLText">SQL语句</param>
        /// <returns>受影响的行数</returns>
        public int ExecuteNonQuery(string SQLText)
        {
            if (IsProcedure(SQLText)) { mCommand.CommandType = CommandType.StoredProcedure; } else { mCommand.CommandType = CommandType.Text; }
            mCommand.CommandText = SQLText;
            try
            {
                mCommand.Connection.Open();
                return mCommand.ExecuteNonQuery();
            }
            finally
            {
                mCommand.Connection.Close();
                ClearParameters();
            }
        }        /// <summary>
        /// 执行数据库命令返回DataReader
        /// </summary>
        /// <param name="SQLText">SQL命令</param>
        /// <returns>返回DataReader</returns>
        public DbDataReader ExecuteReader(string SQLText)
        {
            if (IsProcedure(SQLText)) { mCommand.CommandType = CommandType.StoredProcedure; } else { mCommand.CommandType = CommandType.Text; }
            mCommand.CommandText = SQLText;
            mCommand.Connection.Open();
            try
            {
                return mCommand.ExecuteReader(CommandBehavior.CloseConnection);
            }
            finally
            { ClearParameters(); }
        }        /// <summary>
        /// 执行统计的方法
        /// </summary>
        /// <param name="SQLText">SQL命令</param>
        /// <returns>返回object对象代表统计数据或者结果的第一列第一行</returns>
        public object ExecuteScalar(string SQLText)
        {
            if (IsProcedure(SQLText)) { mCommand.CommandType = CommandType.StoredProcedure; } else { mCommand.CommandType = CommandType.Text; }
            mCommand.CommandText = SQLText;
            try
            {
                mCommand.Connection.Open();
                return mCommand.ExecuteScalar();
            }
            finally
            {
                mCommand.Connection.Close();
                ClearParameters();
            }
        }        /// <summary>
        /// 执行查询返回填充的DataSet对象
        /// </summary>
        /// <param name="SQLText">SQl命令</param>
        /// <param name="VisualTableName">虚拟表名</param>
        /// <param name="StartIndex">制定返回多少行以后的数据</param>
        /// <param name="Count">制定总共返回多少行</param>
        /// <returns>返回按要求填充了的DataSet</returns>
        public DataSet ExecuteDataSet(string SQLText, string VisualTableName, int StartIndex, int Count)
        {
            DataSet ds = new DataSet();
            if (IsProcedure(SQLText)) { mCommand.CommandType = CommandType.StoredProcedure; } else { mCommand.CommandType = CommandType.Text; }
            mCommand.CommandText = SQLText;
            try
            {
                mCommand.Connection.Open();
                mDataAdapter.Fill(ds, StartIndex, Count, VisualTableName);
                return ds;
            }
            finally
            {
                mCommand.Connection.Close();
                ClearParameters();
            }
        }

解决方案 »

  1.   

    是说把 dbhelper 的公有类 提取出来? 
    能问下 公有类指的是哪个嘛?
    那么为什么要费这一遍事呢?直接调用 dbhelper 不可以吗?
      

  2.   

    同一个接口可以有很多实现类,替换传给接口的实现类就可以实现不同的功能,比如说在不修改上层代码的情况下,让程序同时支持不同的数据库。这好比电脑上的接口,比如USB接口。为什么不直接把鼠标焊接在主板上呢?因为做成接口,那么同一个接口可以替换不同的鼠标——比如你没钱就买个有线鼠标,有钱就买个无线鼠标,甚至你可以接一个触摸屏,而只要它们都使用同样的接口标准就行了。
      

  3.   

    嗯,我大概明白接口的意思了。
    针对于现在的 dbhelper ,我的接口类里面应该写什么呢?写 定义个  string 连接字符串?然后用 get set?