我觉得这个接口应该能提供这样的功能:
执行SQL查询语句,能返回DataTable,DataSet,DataReader,记录的第一行第一列;
执行添加,修改,删除的SQL语句;
能执行存储过程;
各个方法都重载了,分带SQL参数,与不带SQL参数。
这个接口能适合Access,SqlServer,Oracel等数据库。当然还有其他功能我没想到的。但是我不太会写,求高人能拿点代码出来分享分享呀!

解决方案 »

  1.   

      public interface IDataBase
        {
            IDbConnection OpenConnect(string connstr);
            DataSet ExeDataSet(string cmdstr);
            int ExecuteNonQuery(string cmdstr);
          
        }
    public class DataBase:IDataBase
        {
            System.Data.OleDb.OleDbConnection cnn = null;
            System.Data.OleDb.OleDbCommand cmd = null;        #region IDataBase 成员
            public System.Data.IDbConnection OpenConnect(string connstr)
            {
                cnn = new System.Data.OleDb.OleDbConnection(connstr);
                return cnn;
            }        public System.Data.DataSet ExeDataSet(string cmdstr)
            {
                if (cnn != null)
                {
                    cmd = new System.Data.OleDb.OleDbCommand(cmdstr, cnn);
                    DataSet ds = new DataSet();                OleDbDataAdapter adp = new OleDbDataAdapter(cmd);
                    adp.Fill(ds);
                    return ds;
                }
                return null;
            }   //实现这个接口
            public int ExecuteNonQuery(string cmdstr)
            {
                if (cnn != null)
                {
                    cmd = new OleDbCommand(cmdstr, cnn);
                    int flag=cmd.ExecuteNonQuery();
                    return flag;
                }
                return 0;
            }         
            #endregion
        }//通过反射 调用 上面实现的DLL
    public class DBMgr
        {
            Object InvokeClass;
            DbConnection cnn;
            Type t;
            string cnnStr = string.Empty;
            string dllPath = string.Empty;
            public DBMgr()
            {
                cnnStr = FlysInfo.AisuoAD.Common.AppConfig.GetConnectionString();
                dllPath = FlysInfo.AisuoAD.Common.AppConfig.GetDBAccessDll();
                Assembly ass = Assembly.LoadFrom(dllPath);
                t = ass.GetType("DB.DataBase");
                InvokeClass = t.InvokeMember(
                   null,
                   BindingFlags.DeclaredOnly |
                   BindingFlags.Public | BindingFlags.NonPublic |
                   BindingFlags.Instance | BindingFlags.CreateInstance,
                   null,
                   null,
                   null);
                cnn = (DbConnection)ExeMethod("OpenConnect", cnnStr);
            }
            public void Open()
            {
                if(cnn!=null)
                {
                    cnn.Open();
                }
            }
            public void Close()
            {
                if(cnn!=null)
                {
                    cnn.Close();
                }
            }
            public DataSet GetDataSet(string cmd)
            {
                SysLog.Append(null, "执行SQL:{0}", cmd);
               return (DataSet)ExeMethod("ExeDataSet", cmd);
            }
            public int GetNoneQuery(string cmd)
            {
                //FlysInfo.AisuoAD.Interface.DB.IDataBase db = (FlysInfo.AisuoAD.Interface.DB.IDataBase)InvokeClass;
               // return db.ExecuteNonQuery(cmd);
                SysLog.Append(null, "执行SQL:{0}",cmd);
                return (int)ExeMethod("ExecuteNonQuery", cmd);
            }
            Mutex m = new Mutex();
            private Object ExeMethod(string name, params Object[] param)
            {            m.WaitOne();
                
                Object rtn = t.InvokeMember(name, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, InvokeClass, param);
                m.ReleaseMutex();
                return rtn;
            }
        }自己配置连接字符串和DLL就行
      

  2.   

    sqlhelper
      

  3.   

    微软的WebCast视频中使用的类, 共四段。
    前三段参考:http://topic.csdn.net/u/20090626/11/3564a7d4-e706-42b3-8cd2-1028ba137a31.html
    中的 12 13 14 楼, 第四段内容为://=====================================================GetDataTable()==============================================      #region 执行查询,并以DataTable返回结果集  GetDataTable(string sql)        /**//// <summary>
            /// 执行查询,并以DataTable返回结果集
            /// </summary>
            /// <param name="sql">SQL语句 </param>
            /// <param name="cmdtype">命令类型 </param>
            /// <param name="parameters">参数 </param>
            /// <returns>DataTable </returns>
            public DataTable GetDataTable(string sql)
            {
                DbParameter[] parameters = new DbParameter[0];
                DataTable dt = GetDataSet(sql, CommandType.Text, parameters).Tables[0];
                return dt;
            }
            /**//// <summary>
            /// 执行查询,并以DataTable返回结果集
            /// </summary>
            /// <param name="sql">SQL语句 </param>
            /// <param name="cmdtype">命令类型 </param>
            /// <param name="parameters">参数 </param>
            /// <returns>DataTable </returns>
            public DataTable GetDataTable(string sql, CommandType cmdtype)
            {
                DbParameter[] parameters = new DbParameter[0];
                DataTable dt = GetDataSet(sql, cmdtype, parameters).Tables[0];
                return dt;
            }
            /**//// <summary>
            /// 执行查询,并以DataTable返回结果集
            /// </summary>
            /// <param name="sql">SQL语句 </param>
            /// <param name="cmdtype">命令类型 </param>
            /// <param name="parameters">参数 </param>
            /// <returns>DataTable </returns>
            public DataTable GetDataTable(string sql, DbParameter[] parameters)
            {            DataTable dt = GetDataSet(sql, CommandType.Text, parameters).Tables[0];
                return dt;
            }        /**//// <summary>
            /// 执行查询,并以DataTable返回结果集
            /// </summary>
            /// <param name="sql">SQL语句 </param>
            /// <param name="cmdtype">命令类型 </param>
            /// <param name="parameters">参数 </param>
            /// <returns>DataTable </returns>
            public DataTable GetDataTable(string sql, CommandType cmdtype, DbParameter[] parameters)
            {
                DataTable dt = GetDataSet(sql, cmdtype, parameters).Tables[0];
                return dt;
            }        /**//// <summary>
            /// 执行查询,并以DataTable返回指定记录的结果集
            /// </summary>
            /// <param name="sql">SQL语句 </param>
            /// <param name="StartIndex">开始索引 </param>
            /// <param name="RecordCount">显示记录 </param>
            /// <returns>DataTable </returns>
            public DataTable GetDataTable(string sql, int StartIndex, int RecordCount)
            {
                return GetDataSet(sql, StartIndex, RecordCount).Tables[0];
            }        /**//// <summary>
            /// 执行查询,返回以空行填充的指定条数记录集
            /// </summary>
            /// <param name="sql">SQL语句 </param>
            /// <param name="SizeCount">显示记录条数 </param>
            /// <returns>DataTable </returns>
            public DataTable GetDataTable(string sql, int SizeCount)
            {
                DataTable dt = GetDataSet(sql).Tables[0];
                int b = SizeCount - dt.Rows.Count;
                if (dt.Rows.Count < SizeCount)
                {
                    for (int i = 0; i < b; i++)
                    {
                        DataRow dr = dt.NewRow();
                        dt.Rows.Add(dr);
                    }
                }
                return dt;
            }        #endregion    }
      

  4.   

    1楼的那个不能实现带参数的sql语句查询呀!
      

  5.   

    DAAB enterpriselibrary中 的