1. 程式人生 > >通過ADO.NET連線資料原理

通過ADO.NET連線資料原理

簡介:

ADO.NET就是一組類庫,這個類庫可以讓我們通過程式的方式訪問資料庫。

組成:

資料提供程式(常用類)

  • connection:用來連線資料庫
  • command:用來執行SQL語句
  • dataReader:只讀,只進的結果集,一條條的讀取資料。
  • dataAdapter:一個封裝上面三個類的物件

資料集(dataset),臨時資料庫

斷開式資料操作

Demo

先體驗一下如何使用ADO.NET在vs中連線資料庫,並操作。 我現在僅僅是為了建立連線,為了簡單,首先建立一個“控制檯應用程式”的專案: 在這裡插入圖片描述

/*連線資料庫的基本步驟如下: 1、建立連線字串——用來表示連線某伺服器的某資料庫例項,以及使用者名稱和密碼 2、建立連線物件 3、開啟連線(如果開啟資料庫連線沒有問題,表示連線成功。) 4、關閉連線(釋放資源) */

1、連線字串的建立

  #region 1.建立連線字串
/*連線字串包括以下幾個部分:
1、data source:伺服器例項(可填:ip,localhost,.(英文的句號),計算機名稱等)
2、Initial Catalog :初始化連線的資料庫例項名稱。
3、Integrated Security:
	如果integrated security=true表示可以在不知道資料庫使用者名稱和密碼的情況下時,依然可以連線資料庫,也就是使用“windows 身份驗證”連線。
	如果integrated security=false,或者不寫,表示一定要輸入正確的資料庫登入名和密碼。
*/
//string constr = "Data Source=.;Initial Catalog=CRB_TPM;integrated security=true";
//string constr = "Data Source=.;Initial Catalog=CRB_TPM;integrated security=SSPI"; //string constr = "Data Source=.;Initial Catalog=CRB_TPM;uid=sa;pwd=123456"; string constr = "Data Source=.;Initial Catalog=CRB_TPM;userid=sa;password=123456"; #endregion

2、建立連線物件

因為我們建立完連線使用後,需要釋放資源,為了方便,我們使用using ,關於using 的用法詳見:補充2

#region 2.建立連線物件
//using 類似於使用try finally 方法,最後使用
using (SqlConnection con=new SqlConnection(constr))//將滑鼠定位到SqlConnection單詞上,shift+alt+F10 可以檢視需要匯入的名稱空間
{

}
#endregion

3、開啟連線:

using (SqlConnection con=new SqlConnection(constr))//將滑鼠定位到SqlConnection單詞上,shift+alt+F10 可以檢視需要匯入的名稱空間
{
    //3、測試開啟連線:
    con.Open();

    //4、關閉連線,並且釋放資源
    //con.Close();//可以不寫,因為Dispose中呼叫了close方法。
    //con.Dispose();//因為我們使用的是using 的方式,所以不需要使用手動的Dispose

 }

資料庫連線的建立全部程式碼如下:

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            /*連線資料庫的基本步驟如下:
             1、建立連線字串——用來表示連線某伺服器的某資料庫例項,以及使用者名稱和密碼
             2、建立連線物件
             3、開啟連線(如果開啟資料庫連線沒有問題,表示連線成功。)
             4、關閉連線(釋放資源)
             */

            #region 1.建立連線字串
            /*連線字串包括以下幾個部分:
             1、data source:伺服器例項(可填:ip,localhost,.(英文的句號),計算機名稱等)
             2、Initial Catalog :初始化連線的資料庫例項名稱。
             3、Integrated Security:
                如果integrated security=true表示可以在不知道資料庫使用者名稱和密碼的情況下時,依然可以連線資料庫,也就是使用“windows 身份驗證”連線。
                如果integrated security=false,或者不寫,表示一定要輸入正確的資料庫登入名和密碼。
             */
            //string constr = "Data Source=.;Initial Catalog=CRB_TPM;integrated security=true";
            //string constr = "Data Source=.;Initial Catalog=CRB_TPM;integrated security=SSPI";
            string constr = "Data Source=.;Initial Catalog=CRB_TPM;uid=sa;pwd=123456";
         
            #endregion

            #region 2.建立連線物件
            //using 類似於使用try finally 方法,最後使用
            using (SqlConnection con=new SqlConnection(constr))//將滑鼠定位到SqlConnection單詞上,shift+alt+F10 可以檢視需要匯入的名稱空間
            {
                //3、測試開啟連線:
                con.Open();
				Console.WriteLine("成功開啟資源。注意:如果con.open() 失敗,則無法執行此句列印程式碼。");//如果con.open() 失敗,則無法執行此句程式碼。

                //4、關閉連線,並且釋放資源
                //con.Close();//可以不寫,因為Dispose中呼叫了close方法。
                //con.Dispose();//因為我們使用的是using 的方式,所以不需要使用手動的Dispose

            }
            #endregion

            Console.WriteLine("關閉連線釋放資源。");
            Console.readkey();
        }
    }
}

執行結果:

在這裡插入圖片描述

下面來說一下增刪改查語句(insert 語句為例):

用過ADO.NET向表中插入一條語句,具體流程程式碼中均有體現

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 通過ADO.NET 向表中插入語句
            //1、建立連線字串
            string ConStrForInsert = "Data Source=.;Initial Catalog=CRB_TPM;uid=sa;pwd=123456";
            //2、建立連線物件
            using (SqlConnection con=new SqlConnection(ConStrForInsert))
            {
                //3、開啟連線
                //con.Open();//不建議在這裡開啟連線物件(連線物件最晚開啟,最早關閉,節省資源)
                //編寫slq語句
                string sql = "  insert into Log(id,Title,[Type],WriteTime,UserID)values('03B2C499-2BEE-4DAA-83E3-0000DB028819','插入語句','insert測試',GETDATE(),'07B2C499-2BEE-4DAA-83E3-0000DB028819')";
                //4、建立一個執行sql語句的物件(命令物件)sqlcommand
                using (SqlCommand cmd=new SqlCommand(sql,con))
                {

                    // 開啟連線(連線物件最晚開啟,最早關閉,節省資源)
                    con.Open();
                    //開始執行sql語句
                    int r = cmd.ExecuteNonQuery();
                    Console.WriteLine("成功插入{0}行資料",r);
                    Console.WriteLine("點選任何按鈕繼續執行");
                    Console.ReadKey();
                    #region 補充:以下三種方式均可執行sql語句增刪改查語句。
                    //cmd.ExecuteNonQuery();//適用於insert、update、delete語句中,返回受影響的行數。
                    //cmd.ExecuteScalar();//適用於返回結果集中只有單個結果的時候,即第一行第一列的值,其他的值忽略。
                    //cmd.ExecuteReader();//適用於查詢並返回多行多列的時候。

                    //ExecuteNonQuery():只有執行insert、update、delete語句的時候,返回int型別的值,表示受影響的行數,執行其他的sql語句成功後返回-1
                    //ExecuteScalar() :當sql語句執行的時候,如果是聚合函式(例如:select count(1) from T_user),那麼ExecuteScalar()返回的不可能是null,因為聚合函式不可能是null。但是如果sql語句不是聚合函式,那麼ExecuteScalar()方法有可能返回null,所以在使用ExecuteScalar()的返回值的時候,需要先判斷是否為null

                    #endregion
                }
                #region 類似SqlCommand cmd=new SqlCommand(sql,con)的寫法
                //using (SqlCommand cmd = new SqlCommand())
                //{
                //    cmd.CommandText = sql;
                //    cmd.Connection = con;

                //}
                #endregion




            }

            #endregion


        }
    }
}

補充1:Integrated Security簡介

預設情況下,Integrated Security 屬性為 False ,這意味著將禁用Windows身份驗證。如果沒有顯式地把這個屬性的值設定為True,連線將使用SQL Server身份驗證,因此,必須提供SQL Server使用者ID和密碼。Integrated Security屬性還能識別的其他值只有SSPI(Security Support Provider Interface,安全性支援提供者介面).在所有的Windows NT作業系統上,其中包括Windows NT 4.0、2000、XP,都支援值SSPI。它是使用Windows身份驗證時可以使用的惟一介面,相當於把Integrated Security 屬性值設定為True。

補充2:using 的三種用法

1.using指令。using + 名稱空間名字,這樣可以在程式中直接用命令空間中的型別,而不必指定型別的詳細名稱空間,類似於Java的import,這個功能也是最常用的,幾乎每個cs的程式都會用到。 例如:using System; 一般都會出現在*.cs中。 2.using別名。using + 別名 = 包括詳細名稱空間資訊的具體的型別。 這種做法有個好處就是當同一個cs引用了兩個不同的名稱空間,但兩個名稱空間都包括了一個相同名字的型別的時候。當需要用到這個型別的時候,就每個地方都要用詳細名稱空間的辦法來區分這些相同名字的型別。而用別名的方法會更簡潔,用到哪個類就給哪個類做別名宣告就可以了。注意:並不是說兩個名字重複,給其中一個用了別名,另外一個就不需要用別名了,如果兩個都要使用,則兩個都需要用using來定義別名的。 例如:   using aClass = NameSpace1.MyClass;   using bClass = NameSpace2.MyClass; 3.using語句,定義一個範圍,在範圍結束時處理物件。 場景: 當在某個程式碼段中使用了類的例項,而希望無論因為什麼原因,只要離開了這個程式碼段就自動呼叫這個類例項的Dispose。 要達到這樣的目的,用try…catch來捕捉異常也是可以的,但用using也很方便。 例如: using (Class1 cls1 = new Class1(), cls2 = new Class1()) { // the code using cls1, cls2 } // call the Dispose on cls1 and cls2

程式碼原件: