C#操作數據庫

C#語言提供了豐富的數據庫操作類庫,極大地方便了對數據庫的操作。在C#中,常用的有三種 訪問數據庫的模式分別爲:SqlClient模式、OleDb模式和Odbc模式。其中SqlClient模式是微軟老大哥專門爲其產品Sql Server數據庫而設計的,所以如果欲使用Sql Server數據庫開發應用程序的話,建議使用這種模式,其性能和效率是比其他模式的要高。OleDb模式和Odbc模式可以運用在任何支持該模式的數據 庫產品中,如Access數據庫、DB2、Sybase和Sql Server 數據庫等。下面簡單介紹C#操作數據庫的大致過程:
1、引入相關的命名空間
在C#中要操作數據庫,一般情況需要引入兩個命名空間,在三種連接模式中都要引入下面的命名空間:
     System.Data;
而另外一個命名空間,使用不同的連接模式而不同,如果使用SqlClient模式的話,則需要引入如下命名空間:
     System.Data.SqlClient;
如果使用OleDb模式的話,需要使用下面的命名空間:
     System.Data.OleDb;
如果使用Odbc模式的話,需要使用下面的命名空間:
    System.Data.Odbc;
2、定義連接字符串,並建立連接對象
在C#中,如果想連接數據庫的話,需要使用Connection連接對象。同樣,不同的連接模式下,所使用的連接對象也不同:
(1)如果使用SqlClient模式的話,其基本連接字符串和連接對象如下:
連接字符串:string connString = "server=.;database=testDB;uid=sa;pwd=;";
其中,server是指數據庫所在的機器(服務器),如果使用當前機器(本地機器)的話,可 以使用“.”、“(local)”、“127.0.0.1”或本地機器的名字。如果使用其它機器上的數據庫的話,可以使用那臺機器的機器名字(確保域和工 作組的正確)或IP地址。database指的數據庫的名字。uid和pwd分別代表連接數據庫的用戶名和密碼。
定義連接字符串後,就可以建立SqlClient模式下的連接對象了,在SqlClient模式下,應使用SqlConnection。
SqlConnection sConn = new SqlConnection(connString);
(2)如果使用OleDb模式的話,其基本連接字符串和連接對象如下:
連接字符串:string connString = "Provider=SQLOLEDB.1;DataSource=(local);uid=sa;pwd=;Initial Catalog=testDB";
其中,Provider給出數據提供程序;DataSource給出數據庫所在的服務器名或 IP地址(具體同SqlClient模式下的server關鍵字);uid和pwd分別指用戶名和密碼;Initial Catalog給出的是所連接的數據庫的名字。如果使用Access數據庫的話,其連接字符串的形式應該如下:
string connString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source = F:\\student.mdb";
定義好連接字符串後,就可以定義連接對象了,在該模式下,應使用OleDbConnection。
OleDbConnection odConn = new OleDbConnection(connString);
(3)如果使用Odbc模式的話,其基本連接字符串和連接對象如下:
連接字符串:string connString = "Driver={Sql Server};Server=.;Database = testDB;uid=sa;pwd=;";
如果使用Access數據庫,其連接字符串如下:
string connString = "{Microsoft Access Driver(*.mdb)};Dbq = \"F:\\student.mdb\";";
定義好連接字符串後,使用OdbcConnection建立連接對象:
OdbcConnection oConn = new OdbcConnection(connString);
3、打開數據庫連接
打開數據庫使用Open方法,但在試圖打開數據連接時會發生錯誤,因此常採用如下的異常控制方法(這裏假設打開SqlClient模式下連接,實際上只不過連接對象的名字不同而已):
     try
            {
                     sConn.Open();
            }
            catch(Exception ex)
            {
                      MessageBox.Show("發生錯誤:"+ex.Message);
                     //Console.WriteLine("發生錯誤:"+ex.Message); //在控制檯下使用這種方式
            }
4、Command命令對象的應用
Command用於向數據庫傳輸的命令的對象,其構造函數常用兩個參數,一個參數是所使用的 命令文本(CommandText),另一個爲所使用的連接對象Connection。根據不同的數據庫連接模式,其形式也不同,SqlCommand對 應着SqlClient模式;OleDbCommand對應着OleDb模式,OdbcCommand對應着Odbc模式。
假設我們想使用SqlClient模式查詢Sql Server中testDB數據庫中student表中的xh(學號)、xm(姓名)和xb(性別)三列的值,則可以建立如下的命令對象(sConn參見建立的連接sConn:
SqlCommand sCmd = new SqlCommand("SELECT xh,xm,xb FROM student",sConn);
亦可使用如下的形式:
SqlCommand sCmd = new SqlCommand();
        sCmd.CommandText = "SELECT xh,xm,xb FROM student";
       sCmd.Connection = sConn;  
命令對象常用的有三個方法:ExecuteReader(), ExecuteNonQuery()和ExecuteScalar()。ExecuteReader方法用於返回查詢結果的全部數據。 ExecuteNonQuery方法用於返回所影響的行數,一般用於Insert、Update和Delete操作。ExecuteScalar方法返回 結果中的第一行第一列的值。
5、數據讀取器DataReader
DataReader用於從返回來的數據區中讀取數據。其根據使用的數據連接模式不同也有不同的形式:SqlDataReader對應着SqlClient模式,OleDbDataReader對應着OleDb模式,OdbcDataReader對應着Odbc模式。
數據讀取器應與命令對象配合使用,下面接着4中的例子來寫:
SqlDataReader sdr = null;
        sdr = sCmd.ExecuteReader();     //執行命令對象,並用sdr指向結果集的第一條記錄。
        while(sdr.Read())   //每讀取一條記錄後,指向其下一條記錄
       {
             Console.WriteLine("學號:{0},姓名:{1},性別:{2}",sdr["xh"],sdr["xm"],sdr["xb"]);   //或使用下面的格式
           // Console.WriteLine("學號:{0},姓名:{1},性別:{2}",sdr[0],sdr[1],sdr[2]);  
       }
       sdr.Close();      //關閉讀取器
6、數據集DataSet和數據適配器DataAdapter
一般數據集和數據適配器是密不可分的,下面先介紹數據適配器。
數據適配器可以容納一組數據命令和一個數據庫連接對象,這與Command對象不同, Command只有一個數據命令和一個數據庫連接。數據適配器根據不同的連接模式也有不同的形式:SqlDataAdapter、 OleDbDataAdapter和OdbcDataAdapter。下面給出SqlClient模式下數據適配器的定義方式:
SqlDataAdapter sda = new SqlDataAdapter("SELECT xh,xm,xb FROM student",sConn);
第一個參數是用到的SQL語句,第二個參數是數據連接。也可以使用一個命令對象傳遞上面的信息。即:
SqlDataAdapter sda = new SqlDataAdapter(sCmd);
下面再介紹一下DataSet,DataSet是在內存中緩存的數據集,包括數據本身,還包括定義在數據上的約束和關係等信息。數據集中可以包含0個這樣的數據對象。不管使用什麼樣的數據庫連接模式,其只有唯一的形式。其定義方法如下:
DataSet ds = new DataSet();
定義完數據集後,就可以調用數據適配器的Fill方法來填充數據集:
sda.Fill(ds);
也可以在填充的同時,指定表名:
sda.Fill(ds,"Student");
可以使用下面的方法讀取數據集中的數據信息:
int rowNum = ds.Tables["Student"].Rows.Count;     //獲得數據集表student表中的行數
int columnNum = ds.Tables["Student"].Columns.Count; //獲得數據集表student中的列數
for(int i = 0; i < rowNum; i ++)
        {
           for(int j = 0; j < columnNum; j ++)
              {
                    Console.Write(ds.Tables["student"].Columns[j].ColumnName+":"+ds.Tables["student"].Rows[i][j].ToString();
             }
             Console.WriteLine();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章