ADO.NET學習筆記(一) (CSDN部落格遷移)

來源:互聯網
上載者:User

      這是我讀《ADO.NET實用指南》的筆記。
1、串連
       ADO.NET最大的特色就在於支援在中斷連線的情況下對資料庫裡的內容進行操作,這樣可以大大的節約過多串連帶來的消耗,前面的那一篇文章中已經給了一個具體的例子說明ADO.NET的這種特性。我們可以在從資料庫裡獲得資料的時候開啟串連,在得到資料之後就中斷連線,對dataset裡面的資料進行操作,然後在把dataset裡的內容更新到資料庫裡面的時候再開啟串連。對於dataReader則必須一直保持串連。
        使用這種特性的時候有幾點要注意一下:
      (1)更改串連屬性的時候必須中斷連線
      (2)切換資料庫的時候選擇conn.changeDatabase(dbName),減少中斷連線與建立串連往返帶來的消耗
        ADO.NET同時支援資料庫內建串連池。在一個串連關閉之後,串連會在池中保持一段時間,然後才實際的關閉,如果在逾時之前,有人請求建立相同的串連,就將開啟的串連分配給要求者,這對於經常進行開啟和斷開的串連可以減少很多的消耗。不過在SQL SERVER 2000中採用整合式安全性的串連無法入池。
       串連涉及到的事件有Dispose,InfoMessage,StateChange,在MSDN可以查到,不再贅述。
       模板代碼:
       Dim conn As SqlConnection
       conn=New SqlConnection("……") '裡面為連接字串
       conn.open()
       '進行相應的操作
       conn.close()

2、Command對象
       ADO.NET允許以三種不同的方式擷取資料庫裡面的資料Command,DataSet,DataReader,Command是最基本的方法,通過執行SQL命令的形式獲得資料。

    (1)建立    可以用兩種方式建立
      a、建立新的Command對象
        Dim cmd As New SqlCommand
        cmd.connection=conn
        cmd.CommandText="SELECT * FROM Customer"
      b、獲得對conn中command對象的引用
        Dim cmd As SqlCommand
        cmd=conn.createCommand();
        cmd.CommandText="SELECT * FROM Customer"      
     推薦第二種方法

     (2)執行    四種執行方式
      ExecuteNonQuery() 返回受命令影響的行數
      ExecuteScalar()   返回第一行第一列(使用與集合函式)
      ExecuteReader() 返回一個DataReader對象
      ExecuteXmlReader()返回一個XmlReader對象

     (3)參數    主要是用在預存程序中,有複雜和精簡兩種形式
      複雜方法: 
      Dim param As new SqlParameter("@Return",SqlDbType.Int)
      param.Direction=ParameterDirection.ReturnValue
      cmd.Parameters.Add(param)
      精簡方法
      cmd.Parameters.Add("@Return_value",DbType.Int32).Direction=ParameterDirection.ReturnValue
      建議:如果需要處理輸出值時的時候使用參數,只處理輸入值的時候就不用使用參數了。

     (4)事務
      用SQL語句:
      Begin TRAN
         SQL操作
         If @@ERROR <>0
         Begin
         RollBack TRAN
         Return @@ERROR
      End
      Commit TRAN
      Return 0
      在ADO.NET中編寫事務
      cmd.Transaction = conn.BeginTransaction()
      try
          cmd.CommandText="..."
          cmd.ExecuteNonQuery()
          cmd.Transaction.commit()
       catch(Exception ex)
          cmd.Transaction.Rollback()
       End try
        如果希望將資料庫交易處理與一些外部系統結合起來(比如在資料庫更新時同時進行了WEB更新,如果WEB更新失敗希望復原事務時),選擇用戶端編寫交易處理(用ADO.NET編寫)
       僅僅做資料庫交易處理的話就直接在服務端寫事務語句(在SQL SERVER2000 中寫事務)
       在事務中可以建立SavePoint來實現部分交易回復
       cmd.Transaction.save("New Customer")
       cmd.Transaction.Rollback("New Customer")

      (5)批處理查詢 如果有多條SQL語句並且可以一起執行的話,就可以進行批處理查詢。在DataReader中支援批處理查詢獲得的資料集。
       cmd.CommandText="SELECT * FROM Customer;SELECT * FROM Inovince;"
       Dim rdr As SqlDataReader
       rdr=cmd.ExecuteReader()
       rdr中即包含兩個SQL語句執行的結果

3、DataReader對象
         DataReader對象只能對查詢獲得的資料集進行自上而下的訪問,但效率很高。如果僅僅是訪問資料的話,可以使用DataReader。但DataReader要求一直串連,所以將結果的一小部分先放在記憶體中,讀完後再從資料庫中讀取一部分,相當於一個緩衝機制。這對於查詢結果百萬級的情況來說,帶來的好處是顯而易見的。
 模板代碼:
       Do While rdr.Read()
            Console.WriteLine(rdr(0))     '也可輸出rdr("CustomerID")
       Loop
       如果要進行類型限制的話可以輸出(String)rdr(0)或rdr.GetString(0)
      
       從DataReader裡讀出資料的時候要注意屬性是否為空白,如果屬性可以為空白,則讀出資料時應進行判斷
       If Not rdr.IsDBNull(0)
          Console.writeLine(...)

       用DataReader讀取記錄時,資料庫預設上鎖,可以通過更改DataReader的預設屬性改變。

       如果DataReader裡面的資料是批處理語句執行得到的話,可以通過NextResult訪問
       模板代碼:
       Do
          Do While rdr.Read()
             Console.WriteLine(rdr(0))   
          Loop      
       Loop While rdr.NextResult()

       處理中繼資料(顯示每個屬性的情況)
       Dim schema As DataTable
       schema=rdr.GetSchemaTable()  '得到中繼資料表,表裡的每列對應每個屬性的特性集合
       對於每一列屬性對應的row,通過row("DataType")獲得這列屬性的資料類型。
       例子:
    Sub Main()
        Dim conn As New SqlConnection("data source=localhost;initial catalog=StudentCourse;" & _
        "User ID=;Password=;")
        Dim cmd As SqlCommand
        conn.Open()
        cmd = conn.CreateCommand
        cmd.CommandText = "Select * From Student"
        Dim rdr As SqlDataReader
        rdr = cmd.ExecuteReader
        Dim schema As DataTable
        schema = rdr.GetSchemaTable
        Dim i As Integer
        i = 0
        Debug.WriteLine(schema.Rows(i)("ColumnName"))
        Debug.WriteLine(schema.Rows(i)("DataType"))
        Debug.WriteLine(schema.Rows(i)("ColumnSize"))
        conn.Close()
    End Sub     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.