使用C#語言操作ADO資料庫
最後更新:2017-02-28
來源:互聯網
上載者:User
ado|資料|資料庫 訪問資料庫是大多數應用程式的一部分,而且隨著C#和ADO.NET的發布,這個過程已經變得相當的簡單.本文將展示下面四個基本的資料庫操作:
1.讀資料.這包括諸如整數,字串和日期等不同的資料類型.
2.寫資料.就象讀資料一樣我們會寫這些通常的資料類型.這是通過SQL語句來實現的.
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 Framework標籤.
4.雙擊System.data.dll條目
5.單擊OK
6.System.Data現在應該出現在了Solution explorer的引用列表中了.
因為連接字串在大多數操作中都要使用,所以我建議你將它設定成你要編寫的類的成員.注意:在你的程式中,資料庫檔案的路徑有可能不同.
//屬性
public const string DB_CONN_STRING =
"Driver={Microsoft Access Driver (*.mdb)}; "+
"DBQ=D:\\CS\\TestDbReadWrite\\SimpleTest.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( "SELECT * 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 == DBObjectState.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(
"\nRow(s) Added = " + nNoAdded + "\n" );
注意: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'";