久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

超級(jí)DBHelper,讓三層代碼冗余降低【原創(chuàng)博文】

 bylele 2013-02-22

大家或許知道動(dòng)態(tài)網(wǎng)頁(yè)就是需要和服務(wù)器做交互,,并且有數(shù)據(jù)交互的,,所以基本會(huì)用到數(shù)據(jù)庫(kù),世界上有很多種數(shù)據(jù)庫(kù),,但現(xiàn)在最流行的基本是以結(jié)構(gòu)化語(yǔ)句(SQL)作為標(biāo)準(zhǔn)化的關(guān)系型數(shù)據(jù)庫(kù),,比如IBM的DB2、微軟的SQL Server數(shù)據(jù)庫(kù)和Access數(shù)據(jù)庫(kù)甲骨文的Orale數(shù)據(jù)庫(kù),、原Sun公司的MySql數(shù)據(jù)庫(kù)(Sun被甲骨文收購(gòu)了,,現(xiàn)在的MySql數(shù)據(jù)庫(kù)版權(quán)歸甲骨文公司所有,但M7在這里把他歸屬于Sun公司,可以看作是一種歷史),、Sybase公司的Sybase數(shù)據(jù)庫(kù)等等,,這些都是平時(shí)開發(fā)比較常用的數(shù)據(jù)庫(kù),而我等下要公布的超級(jí)DBHelper是建立在SQL Server數(shù)據(jù)庫(kù)基礎(chǔ)上的,,當(dāng)然聰明的朋友可以在using引入的類庫(kù)中其他數(shù)據(jù)庫(kù)的Connection對(duì)象,,這樣就能成為萬(wàn)能的DBHelper。

 

注意:

1 要使用SqlConnection對(duì)象必須先引入SqlClient命名空間,,SqlClinent是一個(gè)連接SQL Server數(shù)據(jù)庫(kù)的方法的“集合”,,里面有很多種方法只是針對(duì)SQL Server數(shù)據(jù)庫(kù),繼承于Data命名空間,,Data命名空間可以看作是所有數(shù)據(jù)庫(kù)方法的父類,,里面包含7種命名空間,有連接Orale數(shù)據(jù)庫(kù)的命名空間OleDb等等,。

using System.Data.SqlClient;

2 DBHelper一般是作為數(shù)據(jù)訪問(wèn)層(DAL)的一個(gè)類,,也可以看做是一個(gè)寫了很多種方法的“接口”,里面寫了很多種方法便于DAL層中的很多類來(lái)實(shí)現(xiàn),,這樣誰(shuí)要用到這個(gè)方法就調(diào)用DBHelper中的這個(gè)方法,,減少代碼的冗余。

3 訪問(wèn)數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)名、賬戶,、密碼,、域名等等都將存放在Web.config配置文件中,因?yàn)橥獠渴菬o(wú)法訪問(wèn)或下載Web.confige文件的,,而且在不同配置的服務(wù)器中可能密碼或者賬戶不同,,所以可以先在配置文件中配置多個(gè)數(shù)據(jù),只要在DBHelper文件中修改引入的Name就行了,,很方便的一個(gè)使用方法,,所以必須先在DAl層中點(diǎn)擊右鍵——添加引用,會(huì)出現(xiàn)一個(gè)窗體,,如圖:

超級(jí)DBHelper,,讓三層代碼冗余降低【原創(chuàng)博文】 - 第七號(hào)先生 - 第七號(hào)先生M7

然后在.NET中尋找System.Configuration,找到之后選中,,點(diǎn)擊確定,,完成。

超級(jí)DBHelper,,讓三層代碼冗余降低【原創(chuàng)博文】 - 第七號(hào)先生 - 第七號(hào)先生M7

 

4 或許有人要問(wèn),,上面的添加引用是干什么的?不添加引用,,我們?cè)趗sing引入中找不到Configuration命名空間,,因?yàn)槲以谏厦嬉矔?huì)說(shuō)了,我們要把密碼等一系列安全級(jí)別較高的數(shù)據(jù)存放在配置文件中,,這個(gè)命名空間的方法是為了在類中讀取配置文件的,,所以必須先添加引用,然后在DB類中引入空間:

using System.Configuration,;

5 以上兩個(gè)命名空間成功引入就可以寫代碼了,,代碼如下:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;


namespace TestPrj                 //空間名字 TestPrj

{
    public class DBHelper         //類名 DBHelper
    {

        
        private static string connStr = ConfigurationManager.ConnectionStrings["sqlserver"].ConnectionString;

        private static SqlConnection conn;

        public static SqlConnection Conn
        {
            get
            {
                if (conn == null)
                {
                    conn = new SqlConnection(connStr);
                    conn.Open();
                }
                if (conn != null && conn.State != ConnectionState.Closed)
                {
                    conn.Close();
                    conn.Open();
                }
                else
                {
                    conn.Open();
                }
                return DBHelper.conn;
            }
        }


        /// <summary>
        /// 關(guān)閉連接
        /// </summary>
        public static void closeConn()
        {
            if (Conn != null && Conn.State != ConnectionState.Closed)
            {
                Conn.Close();
            }
        }


        /// <summary>
        /// 查詢操作
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="type"></param>
        /// <param name="pars"></param>
        /// <returns></returns>
        public static SqlDataReader getReader(string sql, CommandType type, params SqlParameter[] pars)
        {
            SqlCommand cmd = new SqlCommand(sql, Conn);
            cmd.CommandType = type;
            cmd.Parameters.AddRange(pars);
            return cmd.ExecuteReader();
        }


        /// <summary>
        /// 執(zhí)行非查詢操作(執(zhí)行增、刪,、改操作的),,不支持事務(wù)
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="type"></param>
        /// <param name="pars"></param>
        /// <returns></returns>
        public static int ExecuteNoneQuery(string sql, CommandType type, params SqlParameter[] pars)
        {
            int result = 0;

            SqlCommand cmd = new SqlCommand(sql, Conn);
            cmd.CommandType = type;
            if (pars != null)
            {
                cmd.Parameters.AddRange(pars);
            }

            result = cmd.ExecuteNonQuery();

            //關(guān)閉連接對(duì)象
            CloseConn();

            return result;
        }

        /// <summary>
        /// 非查詢操作(執(zhí)行增、刪,、改操作的),,支持事務(wù),進(jìn)行批量操作
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="conn"></param>
        /// <param name="type"></param>
        /// <param name="pars"></param>
        /// <returns></returns>
        public static int ExecuteNoneQuery(string sql, SqlConnection conn, CommandType type, params SqlParameter[] pars)
        {
            int result = 0;

            //接受外部提供的數(shù)據(jù)連接對(duì)象,,并且此連接在本次操作后不要關(guān)閉
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.CommandType = type;
            cmd.Parameters.AddRange(pars);

            result = cmd.ExecuteNonQuery();

            return result;
        }

        /// <summary>
        /// 獲取單個(gè)值,,首行首列
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="type"></param>
        /// <param name="pars"></param>
        /// <returns></returns>
        public static object GetScalar(string sql, CommandType type, params SqlParameter[] pars)
        {
            object obj = null;

            SqlCommand cmd = new SqlCommand(sql, Conn);
            cmd.CommandType = type;
            cmd.Parameters.AddRange(pars);

            obj = cmd.ExecuteScalar();

            //關(guān)閉連接對(duì)象
            CloseConn();

            return obj;
        }
    }


//ConfigurationManager 方法:提供對(duì)客戶端應(yīng)用程序配置文件的訪問(wèn),也就是說(shuō)必須通過(guò)這個(gè)方法才能訪問(wèn)Web.config配置文件

//ConnectionStrings 方法有什么用,,干什么的,?我們來(lái)看張圖你就明白了,,打開配置文件找到子節(jié)點(diǎn)<ConnectionStrings/>如圖:

      

超級(jí)DBHelper,讓三層代碼冗余降低【原創(chuàng)博文】 - 第七號(hào)先生 - 第七號(hào)先生M7

//代碼修改如下:<ConnectionStrings>

//                        <add name="你要調(diào)用的名字"  connectionString="數(shù)據(jù)庫(kù)連接對(duì)象—— 服務(wù)器名 賬戶 密碼 數(shù)據(jù)庫(kù)名" />

//                        </ConnectionStrings>

// 所以這句你自然就看的懂了 ConfigurationManager.ConnectionStrings["sqlserver"].ConnectionString;

// 在客戶端訪問(wèn)配置文件的方法 點(diǎn)(.) 配置文件中的子節(jié)點(diǎn)  ["子節(jié)點(diǎn)中的名字"]  點(diǎn)(.)  相對(duì)的子節(jié)點(diǎn)中的內(nèi)容;

//其中的<add > 可以有多個(gè),,name 不能重復(fù),,其實(shí)name就等于Key ,而后面的ConnectionString就等于Value值,。

//用于配置不同的服務(wù)器名賬戶密碼,,因?yàn)槟汩_發(fā)一個(gè)項(xiàng)目可能你的服務(wù)器名字密碼是sa sa. 但是別人的不一定是這樣的,當(dāng)你的項(xiàng)目在別人的機(jī)器上用的時(shí)候,,只需要之前在添加個(gè)<add>,,把別人的賬戶密碼存放在ConnectionString中就行了,,到時(shí)候在DB中把訪問(wèn)配置文件的名字改成剛添加的<add>中的name就行了,,很方便。

 

//上面有3個(gè)判斷,,連接對(duì)象是否為空,?連接對(duì)象的狀態(tài)是否為斷開?連接對(duì)象是否為關(guān)閉,?

//如果是空的話,,就實(shí)例化,然后在利用(Open())方法打開連接對(duì)象,。

//如果在斷開狀態(tài),,就先關(guān)閉,在打開,,一定要先關(guān)閉,,斷開不等于關(guān)閉,這個(gè)要注意,。

//如果是關(guān)閉的話,,也就是說(shuō)連接對(duì)象已經(jīng)實(shí)例化成功,但沒(méi)有開啟,,要用就要開啟,,所以直接打開就行了。

 

//下面還有個(gè)關(guān)閉的方法

//也會(huì)做個(gè)判斷 是否實(shí)例化了,,沒(méi)有實(shí)例化自然沒(méi)有打開,,如果強(qiáng)行關(guān)閉肯定會(huì)拋異常,所以關(guān)閉前必須做判斷,,當(dāng)然如果本來(lái)就是關(guān)閉的狀態(tài),,在去關(guān)閉肯定也會(huì)拋異常,所以我們做了這個(gè)綜合性的判斷,,不在這兩者狀態(tài)下我們才去關(guān)閉連接對(duì)象,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多