學習寫個Sqlserver的協助類

來源:互聯網
上載者:User

標籤:

前兩天上課的內容總結了下,一般在串連層基本就調用那幾個類。

一般包括System.Data.SqlClient和System.Data下的SqlConnection,SqlCommand,SqlDataReader這三個類。如果,要想從設定檔中讀取的話,還需要System.Configuration。

到底怎麼串連我想書上都有,就不寫了。寫單私貨,和老師在上課時講的不一樣的。

方法大家一開始是這麼寫的

        static string connStr = @"Data Source=.\Test;Initial Catalog=test;Integrated Security=True";        public static SqlDataReader GetReader(string sql,params SqlParameter[] pars)        {            using (SqlConnection conn = new SqlConnection(connStr))            {                using (SqlCommand comm = new SqlCommand(sql, conn))                {                    comm.Parameters.AddRange(pars);                    conn.Open();                    return comm.ExecuteReader(CommandBehavior.CloseConnection);                }            }        }

先擷取連接字串(這裡用變數意思一下),然後傳SqlParameters數組和sql語句。大多數人也都這麼寫。但定義參數數組太麻煩了,有好多字,也挺麻煩的。

後來想了想,有沒有更好的辦法呢。要是能讓他自己摘開sql變數多好。於是就寫了下面方法

        //拆解sql得到變數數組,返回list<string>類型的Sql變數數組        private static List<string> GetParamaters(string sql)        {            string meat = sql;            char[] cArray = " ,=()><".ToCharArray();            for (int i = 0; i < cArray.Length; i++)            {                meat = meat.Replace(cArray[i], ‘☆‘);            }            List<string> list = meat.Split(‘☆‘).Where(s => s.Contains("@")).ToList();            list = RemoveRepeatPars(list);            return list;        }

原理其實就是,sql變數前後字元畢竟也就那麼幾個麼“ ,=()<>”,然後用一個稀有的字元替換下(比如上面那個小星星),以免破壞變數名。再用string.Split

把他們按照沒用的字元截斷扔進一個集合裡,這樣我們把變數前後都打斷,再拿出包含‘@‘字元的字串,這些就都是乾淨的變數名了。是吧。

不過之前還有一步,就是把重複的變數去掉!(有些時候用update的時候set一個變數where一個變數有可能會重複)

        private static List<string> RemoveRepeatPars(List<string> list)        {            for (int i = 0; i < list.Count; i++)            {                string s = list[i];                while (true)                {                    if (list.IndexOf(s) != list.LastIndexOf(s))                        list.RemoveAt(list.LastIndexOf(s));                    else                        break;                }            }            return list;        }

前後索引都不一樣的,八成就是重複的。排除之後就剩下純淨的sql參數了!

然後就這麼改下原來的方法

        private static List<string> GetParamaters(string sql)        {            string meat = sql;            char[] cArray = " ,=()><".ToCharArray();            for (int i = 0; i < cArray.Length; i++)            {                meat = meat.Replace(cArray[i], ‘☆‘);            }            List<string> list = meat.Split(‘☆‘).Where(s => s.Contains("@")).ToList();            list = RemoveRepeatPars(list);            return list;        }

把這兩個方法合并,sql的加工就寫好了。下面再改下之前的方法

        public static SqlDataReader GetReader(string sql, params object[] pars)        {            List<string> list = GetParamaters(sql);//上來就先截成參數集合            if (list.Count != pars.Length)            {                throw new Exception("語句中參數個數與給定參數不相符!");//判斷一下sql中的參數是不是和給的參數一樣多,萬一寫錯了呢            }            using (SqlConnection conn = new SqlConnection(connStr))            {                using (SqlCommand comm = new SqlCommand(sql, conn))                {                    for (int i = 0; i < pars.Length; i++)//反正兩個數組數量一樣多,隨便選一個直接加就行了                    {                        comm.Parameters.AddWithValue(list[i], pars[i]);                        conn.Open();                    }                    return comm.ExecuteReader();                }            }        }

然後就用加params的object[]的數組代替原來的Sqlparameters參數了,這樣就方便多了,再也不用定義SqlParameters了

如果下次再要寫參數就直接這樣寫

GetReader(sql,1,"name",0.14,1m)

就好了。就像Console.WriteLine()一樣方便(自我感覺)。

 

學習寫個Sqlserver的協助類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.