ADO.NET 快速入門(十五):ADO 應用轉換爲 ADO.NET

這是一個已經移植到 .NET 的 ADO 應用的例子。也演示了單向、只讀、快速 DataReader 的使用。它演示如何使用 DataView 類從 DataSet 獲取一個 Table 和 操做一個相似於舊的 ADO 記錄集模型。請記得,ADO 記錄集僅僅包含一個 Table 的數據,可是 ADO.NET DataSet 能夠包含多個 Tables 而且很是靈活。
 
原始的 ADO 示例使用 SQL Server 2000 下的 Employee 示例。原始的示例使用 ADO Recordset 對象管理從 SQL 查詢返回的結果數據。新的示例演示瞭如何使用 SqlDataAdapter 填充 DataSet(相似於 ADO Recordset 的模型)。還有,原始的示例使用彈窗(.cpp)和表單(.frm)顯示 Northwind 數據庫 Employ Table 的輸出。然而,在示例中 .NET 示例僅僅使用控制檯窗口輸出非圖形數據。
 
下面示例的要點:
一、鏈接到數據庫
二、使用輕量級、只讀、單向的讀取器
三、執行 SQL 查詢而且生成 ADO Recordset 或者 ADO.NET DataSet
四、使用 ADO Recordset 或者 ADO.NET DataSet 訪問指定記錄集
 
一般在一個 ADO 應用程序中,包括到數據庫的鏈接和執行 SQL 的查詢而且生成 ADO Recordset。
 
在原始的代碼中使用 Visual Basic 版本的 Employee,使用 ADO 鏈接對象和鏈接串「server=(local)\SQLExpression;Integrated Security=SSPI;database=northwind;provider=SQLNCLI」。而後記錄集經過使用 ADO Recordset.Open 方法打開 SQL‘SELECT’查詢。
 
 
    ' Open the database.
 
    cn.Open("server=(local)\SQLExpress;Integrated Security=SSPI;database=northwind;provider=SQLNCLI")
   
    ' Open the Recordset.
    Set rs = New ADODB.Recordset
    rs.Open "select * from Employees", cn, adOpenKeyset, adLockPessimistic
   
    ' Move to the first record and display the data.
    rs.MoveFirst
    FillDataFields

 

   
在 .NET 中的實現很是相似。使用 SqlConnection 對象和鏈接串「server=(local)\SQLExpress;Integrated Security=SSPI;database=northwind」。讀取器一般用於循環執行查詢返回的數據。這個讀取器(只讀、單向的數據讀取器)性能優於原生的 ADO 讀取器。SqlDataAdapter 經過使用 SQL ‘SELECT’查詢和 Fill 方法填充 DataSet。
 
 
    SqlConnection mySqlConnection = new SqlConnection("server=(local)\\SQLExpress;Integrated Security=SSPI;database=northwind");
    SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter("select * from employees", mySqlConnection);
    DataSet myDataSet = new DataSet();
    mySqlDataAdapter.Fill(myDataSet,"Employees");

 

 
在 ADO 應用程序中,有些函數在 Recordset 中從每一個記錄和字段組合獲取數據。這經常是經過調用 Recordset 的 MoveFirst、MoveLast、MovePrevious 和 MoveNext 方法完成。例如:
 
 
    If rs.EOF = False Then
        If rs.BOF = True Then
             rs.MoveFirst
        End If
        rs.MoveNext
    End If
    If rs.EOF = False Then
        FillDataFields
    End If

 

接着使用 Field 訪問器從 Recordset 的當前記錄提取數據。例如:
 
 
    For Each fld In Flds
        FieldSize = fld.ActualSize
        If FieldSize > 0 Then
            Select Case fld.Name
                Case "EmployeeID"
                    txtEID.Text = Str(fld.Value)
                Case "LastName"
                    txtLastName.Text = fld.Value
                Case "FirstName"
                    txtFirstName.Text = fld.Value
                Case "Title"
                    txtTitle.Text = fld.Value
                ...
            End Select
        End If
    Next

 

   
下例中,DataSet 的 「Employee」Table 分配給 DataView,生成的 DataView 經過迭代提取數據值。經過使用 DataView,你可以把 DataSet 中的任一 Table 轉化成 一個功能相似於傳統 ADO Recordset 的對象。
 
    // Create a new dataview instance on the Employees table that was just created
    DataView myDataView = new DataView(myDataSet.Tables["Employees"]);
   
    // Sort the view based on the first column name.
    myDataView.Sort = "EmployeeID";
   
    int iReportsTo;
   
    for (int i = 0; i < myDataView.Count; i++)
    {
      Console.Write("\n************************ Employee number " + (i+1).ToString() + " ************************\n");
      Console.Write("EmployeeID:\t" + myDataView[i]["EmployeeID"].ToString() + "\n" +
                    "FirstName:\t" + myDataView[i]["FirstName"].ToString() + "\n" +
                    "LastName:\t" + myDataView[i]["LastName"].ToString() + "\n" +
                    "Title:\t\t" + myDataView[i]["Title"].ToString() + "\n" +
                    "TitleOfCourtesy:" + myDataView[i]["TitleOfCourtesy"].ToString() + "\n" +
      ...
    }

 

原文連接:
相關文章
相關標籤/搜索