国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

為數據訪問層編寫一個基類

2024-07-21 02:22:57
字體:
來源:轉載
供稿:網友
在編寫數據訪問層代碼時,總要一邊又一邊的重復編寫:讀數據庫連接字符串,建立數據庫連接對象,打開連接,創建command對象,創建數據適配器,創建數據集,填充數據集,關閉連接。這種重復的代碼寫一兩次到還行,寫多了就免不了有一些煩了。
  在總結以前的代碼以后,決定重構數據方法層的代碼。數據訪問層無非進行兩種操作:查詢返回datatable,進行插入、更新、刪除等無返回值的操作。只要增加一個數據訪問層基類包含這些繁瑣的代碼,其余的數據訪問層代碼繼承數據訪問層基類,在調用基類函數時給出存儲過程名稱和存儲過程參數即可。 
數據訪問層基類代碼:
using system;
using system.data;
using system.collections; 
using system.data.sqlclient;
namespace dal
{
 /// <summary>
 /// dalbase 的摘要說明。
 /// 數據層訪問基類,定義數據層訪問公共的變量,方法
 /// </summary>
 public class dalbase
 {
  //定義該類共用變量
  private sqlconnection conn;  //
  private sqlcommand mycm;  //
  private dataset myds;   //
  private sqldataadapter myda; //
  
  /// <summary>
  /// 從web.config中讀取數據庫連接字符串
  /// </summary>
  private string connstr = system.configuration.configurationsettings.appsettings["connectionstring"];
  public dalbase()
  {
   //構造函數,創建對象實例
   conn = new sqlconnection(connstr);
   mycm = conn.createcommand();
   myds = new dataset();
   myda = new sqldataadapter();
  }
  /// <summary>
  /// 通過存儲過程返回查詢表的信息
  /// </summary>
  /// <param name="sprocname">存儲過程名稱</param>
  /// <returns>datatable</returns>
  protected datatable gettable(string sprocname)
  {
   conn.open();
   try
   {
    mycm.commandtext = sprocname;
    mycm.commandtype = commandtype.storedprocedure;
    myda.selectcommand = mycm;
    myda.fill(myds);
   }
   finally
   {
    //無論語句執行正確與否,都關閉連接釋放資源
    conn.close();
   }
   return myds.tables[0];
  }
  /// <summary>
  /// 通過存儲過程和參數返回查詢表的信息
  /// </summary>
  /// <param name="sprocname"></param>
  /// <param name="parameters"></param>
  /// <returns></returns>
  protected datatable gettable(string sprocname, sqlparameter[] parameters)
  {
   conn.open();
   try
   {
    mycm.commandtext = sprocname;
    mycm.commandtype = commandtype.storedprocedure;
    sqlparametercollection sqlparams = mycm.parameters;
    //先清空原有的參數
    mycm.parameters.clear();
    //給command添加參數
    foreach ( sqlparameter parameter in parameters )
    {
     mycm.parameters.add( parameter );
    }
    myda.selectcommand = mycm;
    myda.fill(myds);
   }
   finally
   {
    //無論語句執行正確與否,都關閉連接釋放資源
    conn.close();
   }
   return myds.tables[0];
  }

  /// <summary>
  /// 通過存儲過程及存儲過程參數執行對數據庫無返回值的操作(如:新增,更新,刪除等)
  /// </summary>
  /// <param name="sprocname">存儲過程名稱</param>
  /// <param name="parameters">存儲過程參數</param>
  protected void savetale(string sprocname, sqlparameter[] parameters)
  {
   mycm.commandtext = sprocname; 
   mycm.commandtype = commandtype.storedprocedure; 
   sqlparametercollection sqlparams = mycm.parameters;
   //先清空原有的參數
   mycm.parameters.clear();
   //給command添加參數
   foreach ( sqlparameter parameter in parameters )
   {
    mycm.parameters.add( parameter );
   }
   //打開連接
   conn.open();
   try
   {
    //執行
    mycm.executenonquery(); 
   }
   finally
   {
    //關閉連接
    conn.close();
   }
  }
 }
}
數據訪問層代碼:
using system;
using system.data;
using system.collections; 
using system.data.sqlclient;
namespace dal
{
 public class test : dalbase
 {
  public test()
  {
  }
  public datatable gettesttable()
  {
    return base.gettable("存儲過程名稱");
  }
  public datatable gettesttablebyxname(string xname)
  {
      sqlparameter[] parameters = { new sqlparameter( "@xname",sqldbtype.nvarchar,10 ) };  
      return base.gettable("存儲過程名稱",parameters);
  }

  public void addtesttable(string xname, string description)
  {
   sqlparameter[] parameters = 
   {
    new sqlparameter( "@xname",sqldbtype.nvarchar,10 ),
    new sqlparameter( "@description",sqldbtype.nvarchar,100)
   };
 
   //設置參數值
   parameters[0].value = xname;
   parameters[1].value = description;
   base.savetale("存儲過程名稱",parameters);
  }
 }
}
大家有興趣還可以幫忙擴充一下這個基類,比如增加通過sql語句返回datatable,返回單值結果(如:查詢合計)……
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临潭县| 延安市| 耒阳市| 澳门| 日土县| 乌兰察布市| 东山县| 万宁市| 广饶县| 鄂伦春自治旗| 华蓥市| 城固县| 贡嘎县| 吐鲁番市| 炉霍县| 鄱阳县| 合阳县| 福泉市| 天门市| 烟台市| 扶沟县| 虹口区| 额济纳旗| 巴楚县| 垦利县| 辉县市| 从江县| 沽源县| 甘南县| 泰州市| 涞源县| 桃园市| 龙胜| 文山县| 习水县| 山东省| 彩票| 海林市| 资中县| 区。| 七台河市|