連接對象Connection的使用

 

在C#數據庫編程中,Connection對象用來連接數據源,針對不同的數據庫連接模式,Connection有以下三種形式:

(1)SqlConnection 該對象是專爲連接Sql Server數據庫而設計的

(2)OleDbConnection 該對象可以連接任何類型的數據庫

(3)OdbcConnection

在具體學習內容之前,首先看一個例子,通過這個例子首先了解以下C#編寫數據庫應用程序的方法。

本例是從Access數據庫中將學生的信息讀取出來並打印在屏幕中。

程序的源代碼如下:

//首先引入需要的命名空間

using System;

using System.Data;

using System.Data.OleDb; //使用OleDb連接模式

//定義一個類

class Student

{

 static void Main()

  {

   //定義連接字符串,該連接字符串是使用OleDb連接模式連接Access數據庫的方法

   string connString = "provider=Microsoft.Jet.OleDb.4.0;DataSource=E:\\Lesson\\mydb.mdb;";

   //定義連接對象

   OleDbConnection oConn = new OleDbConnection(connString);

   oConn.Open();//打開連接對象

   OleDbCommand oCmd = new OleDbCommand(); //定義命令對象

   oCmd.CommandText = "SELECT * FROM student";//指定命令對象的命令文本

   oCmd.Connection = oConn; //指定命令對象使用的連接

   OleDbDataReader odr; //定義數據讀取器

   odr = oCmd.ExecuteReader(); //執行命令對象,並用odr指向結果集

   if (odr != null) //如果odr不爲空

    {

     while (odr.Read()) //調用數據讀取器的Read方法讀取一條數據

     {

       Console.Write("學號:" + odr["sid"].ToString()); //使用odr[string name]方式讀取數據

       Console.WriteLine("\t姓名:" + odr[1].ToString()); //使用odr[int index]方式讀取數據

     }

    }

   odr.Close(); //關閉數據讀取器

   if (oConn.State != ConnectionState.Closed) //如果連接不是關閉狀態則將連接關閉

     oConn.Close();

  }

}本程序的運行結果圖示如下:

1、Connection對象的使用

對於不同的數據庫連接模式,Connection對象具有不同的類形式:

(1)SqlClient連接模式對應的Connection形式爲SqlConnection

(2)OleDb連接模式對應的Connection形式爲OleDbConnection

(3)Odbc連接模式對應的Connection形式爲OdbcConnection

2、Connection的屬性

Connection的常用屬性有ConnectionString、ConnectionTimeout、DataBase、DataSource和State。

(1)ConnectionString

爲連接字符串,用來獲取或設置用於打開數據庫的字符串。

(2)ConnectionTimeout屬性

連接超時時間,用來獲取在嘗試建立連接時終止嘗試,並生成錯誤之前所等待的時間。

(3)DataBase屬性

該屬性用來獲取當前數據庫或鏈接打開後要使用的數據庫名稱。

(4)DataSource屬性

該屬性用來設置要鏈接的數據源實例名稱,如SQL Server的Local服務實例。

(5)State屬性

該屬性是一個枚舉值,用來指示當前數據庫連接所處的狀態。該屬性爲只讀值。其取值有以下幾種:

屬性值具體含義

Broken表示該連接與數據源已中斷。只有當連接打開後再與數據庫失去連接纔會導致這種情況。可以關閉處於這種狀態的連接,然後重新打開。

Closed該鏈接是否處於關閉狀態,如處於關閉狀態,則其值爲true

Connecting指示該連接是否正與數據源連接,如果是則其值爲true

Executing該連接對象正在執行數據庫的操作命令

Fetching該連接對象正在檢索數據

Open該連接處於打開狀態

 

3、Connection對象的方法

不管是SqlConnection、OleDbConnection,還是OdbcConnection都提供了下面兩類方法:

(1)構造方法

Connection對象的構造方法有兩種,一種是不帶參數的構造方法,一種是帶一個字符串類型參數的構造方法。

假設使用OleDb連接模式,則創建Connection的方法爲:

OleDbConnection oConn = newOleDbConnection( );

oConn.ConnectionString ="Provider=Microsoft.Jet.OleDb.4.0; DataSource=E:\\Lesson\\mydb.mdb;";上面使用的沒帶參數的構造方法創建了一個OleDbConnection的一個實例oConn,並通過oConn的ConnectionString屬性給出連接字符串。或者使用下面的方法:

string connString ="Provider=Microsoft.Jet.OleDb.4.0; DataSource=E:\\Lesson\\mydb.mdb;";

OleDbConnection oConn = new OleDbConnection(connString);上面的例子中首先定義了一個連接字符串connString,在創建OleDbConnection實例oConn時直接將connString作爲OleDbConnection構造方法的參數。或者也可以使用下面的方法:

OleDbConnection oConn = newOleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; DataSource=E:\\Lesson\\mydb.mdb;");即在創建連接實例的同時在構造方法中直接使用連接字符串給出參數的值。

(2)Open方法

Open方法用於打開連接對象,其使用形式如下:

oConn.Open( );上面的例子中,oConn爲創建的連接實例。

(3)Close方法

Close方法用於關閉連接對象,其使用形式如下:

oConn.Close( );上面的例子中oConn爲創建的連接實例。

4、Connection對象的事件

.NET Framework數據提供程序中的Connection對象有兩個事件:InfoMessage和StateChange。

(1)InfoMessage事件

當數據源中有警告或返回信息性消息時,將觸發本事件,即數據源中存在不會引發異常的消息。InfoMessage事件接收InfoMessageEventArgs對象,該對象主要有Source屬性(發送消息的數據提供程序)、Message屬性(消息的描述)、ErrorCode(消息編碼)、Errors對象(包含Count錯誤數量屬性)。

(2)StateChange事件

StateChange事件在Connection對象的狀態發生改變時觸發。可以使用事件的StateChangeEventArgs參數中的OriginalState和CurrentState屬性獲取原狀態信息和當前狀態信息。

下面使用一個例子來說明上面的知識點:

using System;

using System.Data;

using System.Data.OleDb;

 

class TestConnection

{

 static void Main()

  {

   string connString = "provider=Microsoft.Jet.OleDb.4.0;Data Source=E:\\Lesson\\mydb.mdb;";

   OleDbConnection oConn = new OleDbConnection(connString);

   //預定連接對象狀態發生改變時的處理程序

   oConn.StateChange += new StateChangeEventHandler(oConn_StateChange);

   //預定InfoMessage事件處理程序

   oConn.InfoMessage += new OleDbInfoMessageEventHandler(oConn_InfoMessage);

   oConn.Open();//打開連接

   Console.WriteLine("---------打開連接後連接對象的信息----------");

   Console.WriteLine("連接對象的當前狀態爲:" + oConn.State);

   Console.WriteLine("連接字符串爲:" + oConn.ConnectionString);

   Console.WriteLine("連接對象的數據源爲:" + oConn.DataSource);

   Console.WriteLine("連接對象的數據庫爲:" + oConn.Database.ToString());

   Console.WriteLine("連接對象的超時時間爲:" + oConn.ConnectionTimeout + "秒");

   Console.WriteLine("連接對象的數據提供者爲:" + oConn.Provider);

   Console.WriteLine("連接對象的爲數據提供者版本爲:" + oConn.ServerVersion);

   if (oConn.State != ConnectionState.Closed) //關閉連接

     oConn.Close();

   Console.WriteLine("----------關閉連接後連接對象的狀態----------");

   Console.WriteLine("\n連接對象的當前狀態爲:" + oConn.State);

  }

 

 //StateChange事件處理程序

 static void oConn_StateChange(object sender, StateChangeEventArgs e)

  {

   Console.WriteLine("----------StateChange----------");

   Console.WriteLine("提示:連接對象狀態發生改變由{0}變爲{1}。", e.OriginalState,e.CurrentState);

  }

 

 //InfoMessage事件處理程序

 static void oConn_InfoMessage(object sender, OleDbInfoMessageEventArgse)

  {

   Console.WriteLine("----------InfoMessage----------");

   Console.WriteLine("數據源返回的信息:" + e.Message);

   Console.WriteLine("返回信息的對象名稱:" + e.Source);

  }

}

運行結果如下:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                  本文由www.bailinglan.com轉載

發佈了34 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章