在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;Data Source=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 = new OleDbConnection( );
oConn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0; Data Source=E://Lesson//mydb.mdb;";
上面使用的沒帶參數的構造方法創建了一個OleDbConnection的一個實例oConn,并通過oConn的ConnectionString屬性給出連接字符串。或者使用下面的方法:
string connString = "Provider=Microsoft.Jet.OleDb.4.0; Data Source=E://Lesson//mydb.mdb;";
OleDbConnection oConn = new OleDbConnection(connString);
上面的例子中首先定義了一個連接字符串connString,在創建OleDbConnection實例oConn時直接將connString作為OleDbConnection構造方法的參數。或者也可以使用下面的方法:
OleDbConnection oConn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source=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, OleDbInfoMessageEventArgs e)
{
Console.WriteLine("----------InfoMessage----------");
Console.WriteLine("數據源返回的信息:" + e.Message);
Console.WriteLine("返回信息的對象名稱:" + e.Source);
}
}
運行結果如下:
新聞熱點
疑難解答