1. 程式人生 > >C# SQL Server的封裝(SQLDataAdapter等)之一(共二)

C# SQL Server的封裝(SQLDataAdapter等)之一(共二)

本文章僅是本人學習後總結,如有錯誤之處,請大家指正。
既然你看到這篇文章,說明最少懂,如果看完了還不懂。。。。。你怎麼不上天呢。。。
以下Demo均以SQL Server為例說明。
七個DEMO分別說明以下情況
    1.connection字串
    2.Command的常用的三個方法。
    3.SqlDataApater的Fill方法。
    4.SqlDataAdapter的Update和SqlDataBuilder之間的協作。
    5.如何執行儲存。
    6.如何執行事務。
    7.簡單的擴充套件,針對三層架構,表對應類,封裝快速獲取資料。

Demo1.
說明:SQL的連線字串,舉例說明常見的SQL連線字串的。


        //實際儲存字串的欄位
        private static string _conStr;

        //獲取字串,這是本人常用的方式
        public static string ConStr {
            get {
                if (string.IsNullOrEmpty(_conStr))
                { 
                    //需要引用System.Configuration
                    //獲取app.config中的配置檔案,這個配置檔案指的是程式執行目錄下的config檔案,而不是指專案下的配置檔案
                    _conStr = System.Configuration.ConfigurationManager.ConnectionStrings["SQL"].ConnectionString;
                }
                return _conStr;
            }
        }

        //Config檔案內容
        <configuration
>
<connectionStrings> <!--有很多連線字串方式,這兩種最常見--> <!--常見的方式1:建議採用此方法--> <add name="SQL" connectionString="Data Source=.;Initial Catalog=DemoDate;User ID=sa;Password=123.com;"/> <!--常見的方式2:能看懂即可--> <add name="SQL1" connectionString="Server=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword;"
/>
</connectionStrings> </configuration>

Demo2:
說明:封裝SQL的Command的常用的三個方法

//params 所修飾的引數,必須為最後一個,且引數型別必須為陣列,表明不確定引數個數
        //封裝SQLExecuteNonQuery返回所影響的行數
        public static int SQLExecuteNonQuery(string comStr, params SqlParameter[] paramters)
        {
            //使用using,可以在對應呼叫完成後,自動呼叫Close
            using (SqlConnection connection = new SqlConnection(SQLHelper.ConStr))
            {
                using (SqlCommand command = connection.CreateCommand())
                {
                    try
                    {
                        command.CommandText = comStr;
                        if (paramters != null)
                        {
                            command.Parameters.AddRange(paramters);
                        }
                        //必須先將連線開啟
                        connection.Open();
                        return command.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        //異常後進行連線的關閉
                        connection.Close();
                        throw ex;
                    }
                }
            } 
        }

        //封裝ExecuteScalar方法,返回單行單列值
        //使用泛型方法,內部進行型別轉換,當然你得確保型別轉換不會出錯
        public static T SQLExecuteScalar<T>(string comStr,params SqlParameter[] paramters)
        {
            //使用using,可以在對應呼叫完成後,自動呼叫Close
            using (SqlConnection connection = new SqlConnection(SQLHelper.ConStr))
            {
                using (SqlCommand command = connection.CreateCommand())
                {
                    try
                    {
                        command.CommandText = comStr;
                        if (paramters != null)
                        {
                            command.Parameters.AddRange(paramters);
                        }
                        //必須先將連線開啟,在執行command的方法之前開啟就可以,沒必有建立connection就進行開啟連線
                        connection.Open();
                        return (T)command.ExecuteScalar();
                    }
                    catch (Exception ex)
                    {
                        //異常後進行連線的關閉
                        connection.Close();
                        throw ex;
                    }
                }
            }
        }

        //封裝ExecuteReader方法,這樣會產生一個問題Connection什麼時候進行關閉,呼叫完方法後,Reader一直進行讀取connection未關閉,怎麼辦
        public static SqlDataReader SQLDataReader(string comStr, params SqlParameter[] paramters)
        {
            using (SqlConnection connection = new SqlConnection(SQLHelper.ConStr))
            {
                using (SqlCommand command = connection.CreateCommand())
                {
                    try
                    {
                        command.CommandText = comStr;
                        if (paramters != null)
                        {
                            command.Parameters.AddRange(paramters);
                        }
                        //必須先將連線開啟
                        connection.Open();
                        //CommandBehavior.CloseConnection
                        //在執行該命令時,如果關閉關聯的 DataReader 物件,則關聯的 Connection 物件也將關閉。
                        return command.ExecuteReader(CommandBehavior.CloseConnection);
                    }
                    catch (Exception ex)
                    {
                        //異常後進行連線的關閉
                        connection.Close();
                        throw ex;
                    }
                }
            }
        }

Demo3:
說明:SqlDataApater的Fill方法

        //使用SqlDataAdapter進行資料的填充
        //此處comStr引數必須為SELECT 
        public static DataSet SQLAdapter(string comStr, params SqlParameter[] paramters)
        {
            DataSet dSet=new DataSet();
            using (SqlDataAdapter adapter = new SqlDataAdapter(comStr, SQLHelper.ConStr))
            {
                try
                {
                    if (paramters != null)
                    {
                        adapter.SelectCommand.Parameters.AddRange(paramters);
                    }
                    adapter.Fill(dSet);
                    return dSet;
                }
                catch (Exception ex)
                {
                    adapter.SelectCommand.Connection.Close();
                    throw ex;
                }
            }
        }   

以上沒有進行詳細測試,只是正常生成,自己學習時,請多測試,練習。

相關推薦

C# SQL Server封裝(SQLDataAdapter)之一()

本文章僅是本人學習後總結,如有錯誤之處,請大家指正。 既然你看到這篇文章,說明最少懂,如果看完了還不懂。。。。。你怎麼不上天呢。。。 以下Demo均以SQL Server為例說明。 七個DEMO分別說明以下情況 1.connection字串 2.

[C#]SQL Server Express LocalDb(SqlLocalDb)的一些體會

con director cal zh-cn security href sof [] each 真覺得自己的知識面還是比較窄,在此之前,居然還不知道SqlLocalDb。 SqlLocalDb是啥?其實就是簡化SQL Server的本地數據庫,可以這樣子說,SQL Se

c#+Sql server 綁碼程式 原始碼

c# source code: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; usi

(C# SQL Server) 資料庫連線字串

Debug 一個SQL Server 2008 資料庫連線的問題,老是提示: [67944] System.Data.SqlClient.SqlException (0x80131904): 在與 SQL Server 建立連線時出現與網路相關

(C# SQL Server) 數據庫連接字符串

serve 遠程 system frame catalog 允許 provider win32 init Debug 一個SQL Server 2008 數據庫連接的問題,老是提示: [67944] System.Data.SqlClient.SqlException (0

c# SQl server資料庫與下拉框的繫結

最近接了一個大單子,是讓寫個公司倉庫的進銷存系統,工期是25天,工作量也比較大,對於我來說,真的是一個很大的考驗。裡面對於c# sql資料庫的操作比較多,尤其是對資料的處理以及繫結,下面我來介紹下sql資料庫與下拉框的繫結。: 在區域網的商業軟體中下拉框繫結資

NavicatPremium 連線SQL Server 、MySQL

簡介 Navicat premium是一款資料庫管理工具。將此工具連線資料庫,你可以從中看到各種資料庫的詳細資訊。包括報錯,等等。當然,你也可以通過他,登陸資料庫,進行各種操作。Navicat Pre

c# SQL SERVER 資料寫入

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data.SqlClient

c# sql server 與dataGridView 繫結資料

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System

(4.18)SQL server 2008一些常見配置之(鏈接服務器配置,訪問其他數據庫)

修改 beta pro ntp 查看版本 collation chang 手工 lin SQL server 2008一些常見配置之二(鏈接服務器配置,訪問其他數據庫) 一、訪問Oracle數據庫 Oracle是目前排名第一的數據庫,一般對數據安全和

(轉)SQLServer_十步優化SQL Server中的數據訪問

延遲加載 檢索 tro 最佳實踐 資源 重復調用函數 嵌套循環 exec desc 原文地址:http://tech.it168.com/a2009/1125/814/000000814758_all.shtml 第五步:識別低效TSQL,采用最佳實踐重構和

SQL Server 索引結構及其使用(

SQL Server 索引結構及其使用(二) 作者:freedk   改善SQL語句   很多人不知道SQL語句在SQL SERVER中是如何執行的,他們擔心自己所寫的SQL語句會被SQL SERVER誤解。比如: select * from table1 where nam

SQL Server 性能優化實戰系列()

千萬 binary offset 這樣的 至少 部分 擁有 center 如何解決 SQL Server datetime數據類型設計、優化誤區 一、場景 在SQL Server 2005中,有一個表TestDatetime,其中Dates這個字段的數據類型是datetim

Flume抽取SQL Server設計方案具體實現()觸發器

上一篇將瞭如何使用Flume收集SQL server Board中的新增資料進行處理,如下針對更新的資料進行分析需求:對Board表更新的資料進行處理1.建立一個存更新資料的表Tri_Board_Update,表結構基本和原表機構一樣,但需要新增Update_id(唯一標識列

C# 連接SQL Server數據庫的幾種方式--server+data source方式

如何使用 sel 特定 html 項目 true -- 計算機 技術分享 C# 連接SQL Server數據庫的幾種方式--server+data source等方式 如何使用Connection對象連接數據庫? 對於不同的.NET數據提供者,ADO.NET采用不同

C#封裝SQLDMO操作SQL Server 2000的類

封裝SQLDMO操作的類,能完成常用的SQL Server 2000管理工作。 使用前請新增 "Microsoft SQLDMO Object Library" COM 引用。 有部分程式碼借鑑網路資料,再次向原作者表示感謝。 /* ******************

C# 連線SQL Server資料庫的幾種方式--server+data source方式

<span style="font-family: Arial; background-color: rgb(255, 255, 255);">如何使用Connection物件連線資料庫?</span> 對於不同的.NET資料提供者,ADO.NET

C#與SQL Server儲存過程之一(建立):使用C#建立SQL Server的儲存過程

  通常,開發人員使用的是T-SQL來建立SQL Server的儲存過程、函式和觸發器。而現在的SQL Server 2005已經完全支援.NET通用語言執行時(CLR)了。這就意味著,你可以使用.NET的語言,如C#、VB.NET之類的來開發SQL Server的儲存過程、

sql server編寫簡潔四則運算表示式指令碼實現計算批次功能(C#其它程式語言也能直接用此通用表示式)

問題:  在資料庫程式設計開發中,有時會遇到資料量比較大的情況,如果直接大批量進行新增資料、修改資料、刪除資料,就會是比較大的事務,事務日誌也比較大,耗時久的話會對正常操作造成一定的阻塞。雖不至於達到刪庫跑路的程度,但也嚴重影響了使用者體驗,老是卡巴宕機的感覺。這時我們可以對這個大批量操作進行分小批事務操作處

C# SQL封裝

c# sql封裝(二)接 C# SQL封裝(一)開始操作數據庫的測試 :using System;using System.Collections.Generic;using System.Linq;using System.Text;using DBDome.com;using DBDome.model;u