我对编写类不太熟,请教大家如何写一个数据访问层的类,要求select语句要能根据不同条件重新定义
并传回的不同的dataTable ?

解决方案 »

  1.   

    可以参考:
    namespace ...
    {
        public class DBAgent
        {
            private MySqlConnection m_aConn;
            private MySqlCommand m_aCmd;
            private MySqlDataAdapter m_aAdpt;        public DBAgent()
            {
                m_aConn = new MySqlConnection();
                m_aCmd = new MySqlCommand();
                m_aAdpt = new MySqlDataAdapter();            string connectionString = ...;
                m_aConn.ConnectionString = connectionString;
                this.m_aCmd.Connection = this.m_aConn;
                this.m_aAdpt.SelectCommand = this.m_aCmd;
                this.m_aConn.Open();
            }        public DataTable ExeQuery(string strSql)
            {
                try
                {
                    Monitor.Enter(this.m_aConn);
                    this.m_aCmd.CommandText = strSql + ";";
                    DataTable dtResult = new DataTable();
                    this.m_aAdpt.Fill(dtResult);
                    Monitor.Exit(this.m_aConn);
                    return dtResult;
                }
                catch (Exception x)
                {
                    System.Windows.Forms.MessageBox.Show(...);
                    Monitor.Exit(this.m_aConn);
                    throw x;
                }
            }
        }
    }
      

  2.   

    感谢kissknife(侧身向南边)! 可是怎么用呢?例如我要修改select 语句并得到新的dataTable
      

  3.   

    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;namespace pcate
    {
    public class DBOClass
    {
    public DBOClass()
    {
    }
    //大量读、绑定数据(取得SQL语句)
    public static SqlDataReader localdata(string localsql)
    {
    SqlConnection localcnn = new SqlConnection(ConfigurationSettings.AppSettings["dsn"]);
    try
    {
    localcnn.Open();
    SqlCommand localcmd=new SqlCommand(localsql,localcnn);
    SqlDataReader localdr=localcmd.ExecuteReader(CommandBehavior.CloseConnection);
    return localdr;
    }
    catch (Exception ex)
    {
    throw (ex);
    }
    finally
    {
    //localcnn.Close();
    }
    }
    public static SqlDataReader localdata(string localsql,int P_count,int P_Size,string host,string order)
     {
     SqlConnection localcnn = new SqlConnection(ConfigurationSettings.AppSettings["dsn"]);
     try
     {
     localcnn.Open();
     SqlCommand localcmd=new SqlCommand("spAll_ReturnRows",localcnn);
     localcmd.CommandType = CommandType.StoredProcedure; 
     localcmd.Parameters.Add("@SQL",localsql); 
     localcmd.Parameters.Add("@Page",P_count); 
     localcmd.Parameters.Add("@RecsPerPage",P_Size); 
     localcmd.Parameters.Add("@ID",host);  
     localcmd.Parameters.Add("@Sort",order); 
     SqlDataReader localdr=localcmd.ExecuteReader(CommandBehavior.CloseConnection);
     return localdr;
     }
     catch (Exception ex)
     {
     throw (ex);
     }
     finally
     {
     //localcnn.Close();
     }
     }
    //读单条数据(取得SQL语句)
    public static DataTable localfill(string localsql)
    {
    SqlConnection localcnn = new SqlConnection(ConfigurationSettings.AppSettings["dsn"]);
    try
    {
    localcnn.Open();
    SqlDataAdapter da=new SqlDataAdapter(localsql,localcnn);
    DataSet localds=new DataSet();
    da.Fill(localds);
    return localds.Tables[0];
    }
    catch (Exception ex)
    {
    throw (ex);
    }
    finally
    {
    localcnn.Close();
    }
    }
    ...
    }
      

  4.   

    string connstr="server=.;uid=sa;pwd=;database=northwind";
    SqlAdapter sa=new SqlAdapter(connstr);
    DataSet ds=new DataSet();
    da.Fill(ds,"table");
    被绑定对象.DataSource=ds.Tables["table"];
      

  5.   

    public class mydata
        {
            public DataTable imedata(string sqlcmd)
            {
                OleDbConnection  strconnection=new OleDbConnection ("provider=microsoft.jet.oledb.4.0; data source=" + Server.MapPath("./" + "//access//image.mdb"));
                try
                {
                    OleDbDataAdapter da = new OleDbDataAdapter(sqlcmd, strconnection);
                    DataTable dt = new DataTable("image");                da.Fill(dt);
                    return dt;
                }
                finally
                {
                    strconnection.Close();
                }        }    }
    如上代码,我这样写可以吗?如何引用呢?mydata md=new mydata(); md.imadata("select...."); 吗?好象不行啊
      

  6.   

    数据访问层最后能单独编译成一个DLL。
    然后在业务逻辑或显示层引用。
      

  7.   

    纯粹脱离业务的数据访问层可以参考DAAB的数据访问层。