C#與資料庫訪問技術總結(十八)

[0]發表於2014-12-01

ADO.NET 程式碼綜合示例

    前面已經介紹過OLE DB.NET和SQL Server.NET資料提供者可以用來連線不同的資料來源。

  以下程式碼不僅綜合演示了使用ADO.NET的這兩種資料提供者訪問資料庫的一般步驟,而且說明了使用不同種類的ADO.NET元件集合訪問資料庫的一般步驟。

  可以通過程式碼進一步瞭解這兩種資料提供者訪問方式的異同之處。

使用OLE DB.NET  Provider

OLE DB的資料提供者可以訪問Access和SQL等資料庫,程式碼如下:
//設定連線字串
 string dbname=@" user.mdb";
 string db=Server.MapPath(dbPath);
 string connectionString ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +db;
 //設定SQL語句
 string strSQL=" select  UserId, UserName from User";
//根據連線字串,建立連線物件
OleDbConnection conn=new OleDbConnection(connectionString);
//根據連線物件和SQL語句,建立DataAdapter物件
OleDbDataAdapter  da=new OleDbDataAdapter(strSQL, conn);
//建立OleDbCommandBuilder, 用來對DataAdapter更好地操作
OleDbCommandBuilder  cb=new OleDbCommandBuilder(da);

 

   上述程式碼演示了從根據連線字串建立連線物件,到建立DataAdpate物件填充DataSet,再到使用DataSet物件提交資料更新以及與DataGrid繫結的一般過程。

      上述程式碼也演示了使用Connection、DataAdapter和DataSet訪問資料庫的一般流程。

  ADO.NET採用離線的方式訪問資料庫,所以使用DataSet從資料庫獲得資料後的運算元據的過程中,不必保持與資料庫的連線,直到向資料庫提交更新資料時,才需連上資料庫。這種做法適合於海量資料更新的情況。

     而在上述程式碼裡,因為資料操作過程比較簡單,所以直到資料更新提交結束才斷開連線,也就是說,並沒有採用“離線”的資料庫連線訪問方式。

  不採用“離線”方式的理由是:在資料庫訪問操作中,頻繁連線和斷開資料來源也需要耗費一定的系統資源,如果這個代價要比保持短時間的資料連線所需的代價大,那麼寧可選擇“一直線上”的連線方式。

使用SQL Server .NET  Provider

  

  以下的程式碼演示瞭如何使用SQLServer的.NETProvider來連線和訪問資料。
//連線字串
string connectionString="server=local;database=Northwind;user=sa;pwd=;";
//建立連線
Sqlconnection =new SqlConnection(connectionString);
//SQL語句
string strSql= "select UserID, UserName from User";
//根據連線物件和SQL語句建立SqlCommand物件
SqlCommand cmd=new SqlCommand(strSql, conn);
conn.Open();
//使用Command物件建立SqlDataReader物件
SqlDataReader  reader=cmd.ExecuteReader();
//使用DataReader物件填充DataGrid 控制元件
DataGrid_User.DataSource=reader;
DataGrid_User.DataBind();
//關閉連線
conn.Close();
   上述程式碼也演示了使用Connection、Command和DataReader物件訪問資料庫的一般方式。

 

資料庫訪問綜述

    前面講述了用兩種不同的資料提供者(Provider)訪問連線資料庫的方式,如果資料來源是SQL Server,則使用SQL Server的Provider;如果資料來源是ODBC或是其他型別的資料庫,則可以選用OLE DB的Provider。

    前面還講述了使用Connection+Command+DataReader物件和使用Connection+ DataAdapter+DataSet物件的資料庫訪問方式。

    根據DataReader的特性,以Connection+Command+DataReader方式訪問資料庫的使用場景有:

  • 訪問資料只用於顯示,而不修改。
  • 僅對一個資料來源進行操作,或是對單表進行操作。
  • 對於資料只希望向後順序訪問,而不進行重複遍歷。
  • 訪問資料量小,不需要在記憶體中大量儲存資料。
  • 需要訪問的結果集太大,不能一次性地全部放入記憶體,此時也能使用DataReader來逐次訪問。

    而DataSet支援離線的訪問方式,可以有以下的應用:

  • 同一業務邏輯需要訪問多個資料來源,比如同時要向SQL Server和Oracle資料庫中請求資料。
  • 由於DataSet可以包含多個DataTable,如果需要訪問的資料物件來自多個表,可用DataSet的Table來分別儲存管理。
  • 如果訪問操作的資料量比較大,利用DataSet的離線訪問機制可以減輕對資料庫負載的壓力。

DataGrid控制元件與資料庫訪問技術

    在實際的應用專案中,通常需要把用ADO.NET元件獲得的資料資訊顯示在介面上,供使用者瀏覽或修改。

  可以通過使用.NET的DataGrid控制元件實現這種功能。

DataGrid控制元件與資料繫結

    DataGrid控制元件的主要目的是實現“資料繫結”(Data Binding),即把DataGrid控制元件上顯示的資料同後臺資料庫的資料繫結在一起,同步地一起變化。

另外,DataGrid控制元件以表格的形式顯示了查詢到的資料結果集,預設的訪問方式是隻讀而不能修改,通過設定,可以實現記錄的修改和刪除功能。

DataGrid程式碼示例

    通過以下的步驟,能將資料庫裡的資料動態繫結到DataGrid物件裡並顯示。

    (1)在D盤下建立一個Access型別的資料庫,命名為Student.mdb。在其中新建一張Studentlnfo的表,其中的欄位如表所示。 

字    段

中文描述

資料型別

備    注

SID

學號

文字

主鍵

SName

姓名

文字

  一 

Sex

性別

文字

  一 

 

 

 

 

 

 

注意:本書表中“一”表示無須設定相關資訊。

    完成後往其中插入一些記錄,如(001,Tom,Male)。

    (2)開啟Visual Studio環境後,選擇“檔案”|“新建”|“新建網站”命令,在彈出的新建網站”對話方塊中選擇“ASP.NET專案”,輸入網站名testDataGrid和路徑CAroot~DataGrid,登入模組所有程式碼和配置檔案均放在此專案下。

    (3)在整合開發環境中的“解決方案資源管理器”裡,選中專案,右擊,在彈出的快捷選單中選擇“新增新項”命令,新建一個Web配置檔案,命名為Web.config。該配置檔案主要用來管理登入模組的一些全域性性資料。

    其中,在配置檔案裡設定資料庫的連線屬性,使用OleDB的Data Provider,連線到Access資料來源上,程式碼如下。

  

<configuration>
  <appSettings>
<add key="connStr" value="Porvider=Microsoft.Jet.OleDB.4.0; Data Source=D:\login.mdb "></add>
  </appSettings>
<connectionStrings />

 

   (4)在整合開發環境中的“解決方案資源管理器”裡,選中專案,右擊,在彈出的快捷選單中選擇“新增新項”命令,新建一個Web窗體,命名為showDataGrid.aspx。

    (5)開啟“工具箱”的“Web窗體”,從中拖曳一個DataGrid控制元件到頁面上,從DataGrid的屬性欄中,可以看到該DataGrid物件叫DataGrid1。

    選中DataGridView控制元件,右擊,在彈出的快捷選單中選擇"屬性"命令,在屬性欄的Columns中單擊“…”按鈕,在彈出的“編輯列”對話方塊中,通過“新增”命令,依次向DataGridView控制元件裡新增“學號”、“姓名”和“性別”3列,並把每列的DataPropertyName設定成該列對應的資料庫欄位,用於資料繫結。具體設定如表所示。

資料列名

DataPropertyName

學號

SID

姓名

SName

性別

Sex

 

 

 

 

 

 

(6)雙擊窗體的空白處,進入相應的邏輯程式碼檔案showDataGrid.aspx.cs。

  在該檔案的頂端,新增資料庫訪問引用的名稱空間語句:    

  using System.Data.SqlClient;

 

  並在class的開頭新增連線資料庫的字串定義:     

Private static string strConnect =System.Configuration.ConfigurationManager.AppSettings["connstr"];

 

  由於使用的是DataProvider,所以ADO.NET元件的物件都以OleDb開頭。

    上述程式碼的主要業務邏輯是:

    (1)根據連線字串,建立資料庫連線物件,並根據連線物件建立OLeDbCommand物件。

    (2)根據SQL語句,查詢所有學生的資訊,以SID的/頃序排列。

    (3)使用OleDbDataApapter物件,將查詢結果填充到DataSet中的。均Dataset資料表裡。

    (4)將DataGrid的資料來源設定成。均Dataset資料表,實現資料繫結。

    這樣,當開啟此頁面時,DataGrid就能與Access資料庫繫結,顯示資料庫裡的學生資訊。

相關文章