使用C#語言操作ADO資料庫 (轉)

amyz發表於2007-08-16
使用C#語言操作ADO資料庫 (轉)[@more@]

訪問是大多數應用的一部分,而且隨著和的釋出,這個過程已經變得相當的簡單.本文將展示下面四個基本的資料庫操作:

1.讀資料.這包括諸如整數,字串和日期等不同的資料型別.
2.寫資料.就象讀資料一樣我們會寫這些通常的資料型別.這是透過語句來實現的.
3.或是修改資料.我們還是使用簡單SQL語句.
4.刪除資料.使用SQL.


這些操作是對一個Access 2000資料庫進行的,但是SQL或是其它ADO資料來源可以透過簡單的改變連線字串來使用.

開始第一步
為了使用ADO類,我們需要包括進ADO.NET名稱空間(namespace)和一些精巧的日期類.在你要進行資料庫操作的地方加入下列幾行程式碼.它應該被放置在名稱空間引入程式碼行的下面而在類定義的上面.

using System.Data; // 申明變數
using System.Data.ADO; // 資料庫
using System.Globalization; // 日期

根據你所參與的工程的型別,你可能需要增加對System.Data名稱空間的引用.你可以根據在你新增上面的程式碼以後是否產生錯誤來判斷.要新增System.Data名稱空間,你可以:
1.在Solution explorer-References 分支中右鍵單擊.
2.選擇"新增引用"
3.選擇.NET 標籤.
4.雙擊System.data.dll條目
5.單擊OK
6.System.Data現在應該出現在了Solution explorer的引用列表中了.

因為連線字串在大多數操作中都要使用,所以我建議你將它設定成你要編寫的類的成員.注意:在你的程式中,資料庫的路徑有可能不同.

//屬性
public const string _CONN_STRING =
"={ Access Driver (*.mdb)}; "+
"DBQ=D:CSTestDbReadWriteSimpleTest.mdb";


讀資料
現在一切都變得有趣起來.讀資料可以透過ADODataReader類來實現.(參看Chris Maunder的文章"ADO.NET ADODataReader類"來獲取關於這個類的更多資訊.)讀資料的步驟如下:

1.我們用ADOConnection來開啟一個資料庫.
ADOConnection conn =
new ADOConnection(DB_CONN_STRING);
conn.Open();
2.我們編寫一個SQL語句來定義將要取出的資料.這個資料的結果是返回一個ADODataReader .注意Execute方法中的out關鍵字.這在C#中意味著透過引用傳遞引數.

ADODataReader dr;
ADOCommand cmd =
new ADOCommand( " * FROM Person", conn );
cmd.Execute( out dr);

3.我們迴圈遍歷ADODataReader中的每一個記錄直到我們完成要做的工作.注意:資料被直接作為一個字串返回同時資料域名稱用來指明讀的資料域.
while( dr.Read() )
{
System.Console.WriteLine( dr["FirstName"] );
}
4.我們收工
但是,作為好的程式設計師我們還需要加進許多try/catch/finally語句來確保我們處理了所有的錯誤.
try
{
.... 資料庫操作 ...
}
catch( Exception ex )
{
System.Console.WriteLine( "READING:" );
System.Console.WriteLine( " ERROR:" + ex.Message );
System.Console.WriteLine( " SQL :" + sSqlCmd );
System.Console.WriteLine( " Conn.:" + DB_CONN_STRING );
}
finally
{
// 關閉連線
if( conn.State == DBState.Open )
conn.Close();
}


讀取不同的資料型別
dr["stuff"]這個語句通常能夠返回一個資料.但是要返回一個int或者DateTime物件的話通常需要進行資料轉換.這通常可以透過使用ADODataReader許多內建轉換器中的一個來實現.也就是:

int nOrdinalAge = dr.GetOrdinal( "Age" );
int nAge = dr.GetInt32( nOrdinalAge );

DateTime tUpdated = (DateTime)dr["Updated"];

注意GetOrdinal定位資料域用名字來讀取資料的用法.如果資料域是空白的(還沒有填入任何資料),上面的程式碼會丟擲一個異常.要捕捉這種情況,我們可以用IsNull方法檢查是否有資料存在,如下所示:

int nOrdinalAge = dr.GetOrdinal( "Age" );
if( dr.IsNull( nOrdinalAge ) )
{
System.Console.WriteLine( " Age : Not given!" );
}
else
{
int nAge = dr.GetInt32( nOrdinalAge );
System.Console.WriteLine( " Age : " + nAge );
}


插入,修改,刪除和其他SQL命令
插入,修改,刪除過程可以非常容易的透過SQL語句來實現.下面的程式碼執行一條SQL命令來插入一條記錄.

// SQL 命令
String sSQLCommand =
"INSERT INTO Person (Age, FirstName, Description, Updated) " +
"VALUES( 55, ’Bob’, ’Is a Penguin’, ’2001/12/25 20:30:15’ );";
// 建立command物件
ADOCommand cmdAdder = new ADOCommand(
sSQLCommand,
DB_CONN_STRING);
cmdAdder.ActiveConnection.Open();
// Execute the SQL command
int nNoAdded = cmdAdder.ExecuteNonQuery();
System.Console.WriteLine(
" Row(s) Added = " + nNoAdded + " " );

注意:try/catch程式碼沒有在上面的例子裡出現,但是應該包括上面的程式碼.

插入
上面的程式碼透過建立一個SQL命令然後執行它來插入一條記錄.一些在編寫SQL命令時應注意的事項如下:
1.數值資料應該直接表示.沒有單引號(’).
2.字串的表示應該包括在單引號中(’blah’).
3.確保字串中不包含任何嵌入的單(雙)引號.這會使事情混淆.
4.日期和時間資料用包裹在單引號中的國際通用形式來表示(’YYYY/MM/DD HH:MM:SS’).

修改

UPDATE命令指明要修改的資料和修改的動作.ExecuteNonQuery()的返回值指出改變的記錄的個數,所以如果有5個Peter’s在表單中的話下面的程式碼將返回5.
String sSQLCommand =
"UPDATE Person SET Age = 27 WHERE FirstName = ’Peter’";

刪除
DELETE命令指明要刪除的記錄.ExecuteNonQuery()的返回值指出改變的記錄的個數,所以如果有2個Bobo在表單中的話下面的程式碼將返回2.兩個Bobo都會被刪除.

String sSQLCommand =
"DELETE FROM Person WHERE FirstName = ’Bobo’";


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-962641/,如需轉載,請註明出處,否則將追究法律責任。

相關文章