• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于.NET技術(shù)實(shí)現(xiàn)SQL Server數(shù)據(jù)庫的通用維護(hù)

      2014-02-25 04:31:09張捍衛(wèi)余升
      電腦知識與技術(shù) 2014年1期
      關(guān)鍵詞:數(shù)據(jù)庫

      張捍衛(wèi) 余升

      摘要:在開發(fā)Web應(yīng)用程序時,經(jīng)常要對數(shù)據(jù)庫進(jìn)行訪問,實(shí)現(xiàn)對數(shù)據(jù)的增加、刪除、修改等操作。這一系列操作代碼是煩瑣的,而且每次對數(shù)據(jù)庫操作都要重復(fù)編寫這些代碼。該文介紹了運(yùn)用.NET技術(shù)和數(shù)據(jù)庫技術(shù)編寫通用代碼,用較短的程序代替通常需要重復(fù)書寫的大量程序段,減少了數(shù)據(jù)庫維護(hù)的工作量,提高了項目開發(fā)的效率。

      關(guān)鍵詞:.NET技術(shù);數(shù)據(jù)庫;通用維護(hù)

      中圖分類號:TP391 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)01-0014-02

      在SQL Server數(shù)據(jù)庫系統(tǒng)開發(fā)中,經(jīng)常要處理多個數(shù)據(jù)表,對于這些數(shù)據(jù)表一般都需要編寫程序,實(shí)現(xiàn)數(shù)據(jù)的添加、修改和刪除等維護(hù)操作。這些操作方法步驟相同,不同的只是表的名稱、字段名稱和數(shù)據(jù)類型等,但每次需要重復(fù)的編寫這些代碼,導(dǎo)致程序不能適應(yīng)用戶需求的變化,缺乏靈活性,對數(shù)據(jù)庫結(jié)構(gòu)調(diào)整的適應(yīng)能力不強(qiáng),進(jìn)而影響到項目開發(fā)的效率、進(jìn)度和開發(fā)質(zhì)量。該文介紹的數(shù)據(jù)庫通用維護(hù)操作模塊在Visual Studio .NET環(huán)境下實(shí)現(xiàn),為解決多數(shù)據(jù)表的通用維護(hù)操作提供了一個較好的解決方案,并通過一系列的測試與應(yīng)用,證明這種方案具有一定的實(shí)用價值。

      1 實(shí)現(xiàn)思想

      在SQL Server數(shù)據(jù)庫中,對數(shù)據(jù)庫的維護(hù)操作是通過結(jié)構(gòu)化查詢語言SQL進(jìn)行的。添加記錄是由Insert語句完成的,其基本的形式為:Insert Into 表名 (字段名列表) Values (值列表);修改記錄語句是:Update 表名 set 修正式列表 where 條件;刪除記錄的語句是:Delete from 表名 where 條件??梢钥闯?,把表名、字段名或字段的值傳遞給維護(hù)記錄的方法,就能實(shí)現(xiàn)數(shù)據(jù)的通用維護(hù)操作。

      維護(hù)記錄的方法就是利用傳遞過來的參數(shù),自動獲取字段信息,生成SQL語句,完成相應(yīng)的操作。字段信息的獲取可以通過SQL Server提供的系統(tǒng)視圖來實(shí)現(xiàn),INFORMATION_SCHEMA.COLUMNS系統(tǒng)視圖,就存有當(dāng)前數(shù)據(jù)庫中用戶可以訪問的所有數(shù)據(jù)表的字段信息,其中的部分信息如表1所示。在設(shè)計時,只要知道要訪問的數(shù)據(jù)表名稱,就能獲得該表的結(jié)構(gòu)信息。

      表1 系統(tǒng)視圖information_schema.columns部分字段信息

      [字段名\&字段類型\&說明\&TABLE_NAME\&nvarchar(128)\&表的名稱\&COLUMN_NAME\&nvarchar(128)\&表中字段名稱\&DATA_TYPE\&nvarchar(128)\&表中字段數(shù)據(jù)類型\&CHARACTER_MAXIMUM_LENGTH\∫\&字符型字段最大字符數(shù)\&COLUMN_DEFAULT\&nvarchar(4000)\&字段缺省值\&]

      2 實(shí)現(xiàn)方法

      2.1 傳遞字段

      傳遞字段主要是字段名及字段值的傳遞,可以采用二維字符串?dāng)?shù)組,也可以使用Hash表來實(shí)現(xiàn)。Hash表,也叫散列表,表示鍵/值對的集合,是根據(jù)關(guān)鍵詞/值(Key,value)直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu)。使用Hash表的一個優(yōu)點(diǎn)是關(guān)鍵詞不允許重復(fù),這樣可以避免書寫失誤造成字段名重復(fù)的問題。在數(shù)據(jù)增加頁面中,將要操作的數(shù)據(jù)表的字段名以及相對應(yīng)的字段值,添加到Hash表中,然后在調(diào)用增加記錄的方法時作為實(shí)參傳遞過去。

      定義Hash表對象:Hashtable hash = new Hashtable();

      向Hash表中添加元素的方法:hash.Add("字段名", "字段值");

      調(diào)用增加記錄的方法:由于dbAdd(string, Hashtable)被定義成類的靜態(tài)方法,所以調(diào)用語句的形式為:

      類名.dbAdd("表名", hash);

      2.2 連接數(shù)據(jù)庫

      從Web.Config配置文件中獲取數(shù)據(jù)庫連接字符串,創(chuàng)建SqlConnection對象,并返回該對象。

      Public static SqlConnection conn()

      { string strConn =ConfigurationManager.ConnectionStrings["SQLConnectionString"].ToString();

      SqlConnection con = new SqlConnection(strConn); return con; }

      2.3 獲取字段信息

      下述代碼是獲取字段的信息,方法中有兩個參數(shù),tablename是數(shù)據(jù)表名,columnName是字段名。執(zhí)行時,從information_schema.columns視圖中獲取數(shù)據(jù)表指定字段的信息,并將獲取的結(jié)果保存在SqlDataReader對象dr中,并返回dr。

      private static SqlDataReader getColummTypeAndLength(string tablename, string columnName)

      { SqlConnection con = conn();//創(chuàng)建連接

      string cmdText = "Select * from information_schema.columns where TABLE_NAME=@Table_Name and COLUMN_NAME=@Column_Name";

      SqlCommand cmd = new SqlCommand(cmdText, con); //創(chuàng)建SqlCommand

      //創(chuàng)建參數(shù)并賦值

      cmd.Parameters.Add("@Table_Name", SqlDbType.NVarChar, 128);

      cmd.Parameters.Add("@Column_Name", SqlDbType.NVarChar, 128);

      cmd.Parameters[0].Value = tablename; cmd.Parameters[1].Value = columnName;

      SqlDataReader dr; //定義SqlDataReader

      con.Open(); //打開連接

      dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); //執(zhí)行并關(guān)閉對象

      return dr; }

      2.4 添加記錄

      添加記錄方法dbAdd(string tablename, Hashtable hashTable)是將記錄添加到數(shù)據(jù)庫中,該方法有兩個參數(shù),tablename是數(shù)據(jù)表名, hashTable是Hash表對象,即保存有字段名及值的集合。方法中還定義了兩個字符串變量:sql1, sql2 分別存放字段名列表和字段值參數(shù)列表。運(yùn)行時從Hash表中依次循環(huán),每次取出一個元素后,調(diào)用getColummTypeAndLength(string tablename, string columnName)方法,獲取字段的類型及長度等,形成字段列表、字段值參數(shù)列表,以及參數(shù)類型的定義和參數(shù)值的設(shè)置,最終形成插入記錄的SQL語句后,打開數(shù)據(jù)庫連接,執(zhí)行添加操作。如果操作成功,返回大于0的值,否則返回-1。

      public static int dbAdd(string tablename, Hashtable hashTable)

      { SqlConnection con = conn();//創(chuàng)建連接

      SqlCommand cmd = new SqlCommand();

      string sql1 = "", sql2 = "";

      foreach (DictionaryEntry entry in hashTable)

      { SqlDataReader dr = getColummTypeAndLength(tablename, entry.Key.ToString());

      if (dr != null) {

      string colName = entry.Key.ToString();

      string colParaName = "@" + entry.Key.ToString();

      sql1 += colName + ","; sql2 += colParaName + ","; //生成字段名和值列表

      if (dr.Read()) { //設(shè)置參數(shù)類型及參數(shù)值

      switch (dr["DATA_TYPE"].ToString()){

      case "varchar":

      int col_len=int.Parse(dr["CHARACTER_MAXIMUM_LENGTH"].ToString());

      cmd.Parameters.Add(new SqlParameter(colParaName, SqlDbType.VarChar,col_len ));

      cmd.Parameters[colParaName].Value = entry.Value.ToString(); break;

      case "int":

      cmd.Parameters.Add(new SqlParameter(colParaName, SqlDbType.Int)); (下轉(zhuǎn)第19頁)

      (上接第15頁)

      cmd.Parameters[colParaName].Value = int.Parse(entry.Value.ToString()); break;

      //由于篇幅所限,添加其它字段類型參數(shù)這里省略 }}

      dr.Close(); }}

      sql1 = sql1.Substring(0, sql1.Length - 1); //去掉字段名最后的逗號

      sql2 = sql2.Substring(0, sql2.Length - 1); //去掉參數(shù)最后的逗號

      cmd.CommandText = "Insert Into "+tablename+ " ("+sql1 + ") Values (" + sql2+")";

      cmd.Connection = con; int result = -1; con.Open();

      result = cmd.ExecuteNonQuery(); con.Close(); return result;}

      2.5 添加引用

      在編寫代碼過程中,由于使用了數(shù)據(jù)庫、Hash表和Web配置文件,所以除系統(tǒng)默認(rèn)的命名空間外,還要引入System.Data.SqlClient、System.Collections和System.Configuration命名空間。

      3 結(jié)束語

      上述介紹的是數(shù)據(jù)添加的實(shí)現(xiàn)過程,修改記錄的方法與此類似,刪除記錄則相對簡單,只要理解了該方法的實(shí)現(xiàn)過程,一定能完成修改和刪除記錄的操作。實(shí)踐證明,該數(shù)據(jù)庫通用維護(hù)代碼的使用,實(shí)現(xiàn)了在各種表上進(jìn)行插入、刪除和更新數(shù)據(jù)操作,對于項目開發(fā)效率,程序代碼復(fù)用性、開發(fā)質(zhì)量等都會得到極大的提高。

      參考文獻(xiàn):

      [1] 張彥.利用ASP技術(shù)實(shí)現(xiàn)數(shù)據(jù)庫的通用維護(hù)[J].福建電腦,2003(3):37.

      [2] 王緩緩,李虎.使用設(shè)計模式構(gòu)建基于.NET的通用數(shù)據(jù)庫訪問層[J].計算機(jī)與現(xiàn)代化,2005,113(1):29-32.

      [3] 李萬寶.ASP.NET企業(yè)級開發(fā)案例精解(C#)[M].北京:中國林業(yè)出版社,2005.

      猜你喜歡
      數(shù)據(jù)庫
      數(shù)據(jù)庫
      財經(jīng)(2017年15期)2017-07-03 22:40:49
      數(shù)據(jù)庫
      財經(jīng)(2017年2期)2017-03-10 14:35:35
      兩種新的非確定數(shù)據(jù)庫上的Top-K查詢
      數(shù)據(jù)庫
      財經(jīng)(2016年15期)2016-06-03 07:38:02
      數(shù)據(jù)庫
      財經(jīng)(2016年3期)2016-03-07 07:44:46
      數(shù)據(jù)庫
      財經(jīng)(2016年6期)2016-02-24 07:41:51
      數(shù)據(jù)庫
      財經(jīng)(2015年3期)2015-06-09 17:41:31
      數(shù)據(jù)庫
      財經(jīng)(2014年21期)2014-08-18 01:50:18
      數(shù)據(jù)庫
      財經(jīng)(2014年6期)2014-03-12 08:28:19
      數(shù)據(jù)庫
      財經(jīng)(2013年6期)2013-04-29 17:59:30
      宁阳县| 都匀市| 綦江县| 山东省| 翁源县| 洪泽县| 城步| 宁河县| 桦川县| 那坡县| 武乡县| 大渡口区| 永和县| 桂林市| 石门县| 岚皋县| 榆树市| 沈丘县| 宜君县| 东辽县| 田阳县| 嘉兴市| 荣昌县| 江阴市| 栾川县| 忻城县| 雷山县| 南木林县| 民乐县| 布尔津县| 英德市| 双峰县| 新化县| 甘德县| 分宜县| 娄底市| 石景山区| 阿克| 察隅县| 新泰市| 罗源县|