2024年3月9日发(作者:)

在C#数据库编程中,Connection对象用来连接数据源,针对不同的数据库连接模式,

Connection有以下三种形式:

(1)SqlConnection 该对象是专为连接Sql Server数据库而设计的

(2)OleDbConnection 该对象可以连接任何类型的数据库

(3)OdbcConnection

在具体学习内容之前,首先看一个例子,通过这个例子首先了解以下C#编写数据库应用程

序的方法。

本例是从Access数据库中将学生的信息读取出来并打印在屏幕中。

程序的源代码如下:

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

using System;

using ;

using ; //使用OleDb连接模式

//定义一个类

class Student

{

static void Main()

{

//定义连接字符串,该连接字符串是使用OleDb连接模式连接Access数据库的方法

string connString = "provider=.4.0;Data

Source=E:;";

//定义连接对象

OleDbConnection oConn = new OleDbConnection(connString);

();//打开连接对象

OleDbCommand oCmd = new OleDbCommand(); //定义命令对象

dText = "SELECT * FROM student";//指定命令对象的命令文本

tion = oConn; //指定命令对象使用的连接

OleDbDataReader odr; //定义数据读取器

odr = eReader(); //执行命令对象,并用odr指向结果集

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

{

while (()) //调用数据读取器的Read方法读取一条数据

{

("学号:" + odr["sid"].ToString()); //使用odr[string name]方式读取数据

ine("t姓名:" + odr[1].ToString()); //使用odr[int index]方式读取数据

}

}

(); //关闭数据读取器

if ( != ) //如果连接不是关闭状态则将连接关闭

();

}

}本程序的运行结果图示如下:

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( );

tionString = "Provider=.4.0; Data

Source=E:;";上面使用的没带参数的构造方法创建了一个

OleDbConnection的一个实例oConn,并通过oConn的ConnectionString属性给出连接字符

串。或者使用下面的方法:

string connString = "Provider=.4.0; Data Source=E:;";

OleDbConnection oConn = new OleDbConnection(connString);上面的例子中首先定义了一个

连接字符串connString,在创建OleDbConnection实例oConn时直接将connString作为

OleDbConnection构造方法的参数。或者也可以使用下面的方法:

OleDbConnection oConn = new OleDbConnection("Provider=.4.0; Data

Source=E:;");即在创建连接实例的同时在构造方法中直接使用连接字符

串给出参数的值。

(2)Open方法

Open方法用于打开连接对象,其使用形式如下:

( );上面的例子中,oConn为创建的连接实例。

(3)Close方法

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 ;

using ;

class TestConnection

{

static void Main()

{

string connString = "provider=.4.0;Data

Source=E:;";

OleDbConnection oConn = new OleDbConnection(connString);

//预定连接对象状态发生改变时的处理程序

hange += new StateChangeEventHandler(oConn_StateChange);

//预定InfoMessage事件处理程序

ssage += new OleDbInfoMessageEventHandler(oConn_InfoMessage);

();//打开连接

ine("---------打开连接后连接对象的信息----------");

ine("连接对象的当前状态为:" + );

ine("连接字符串为:" + tionString);

ine("连接对象的数据源为:" + urce);

ine("连接对象的数据库为:" + ng());

ine("连接对象的超时时间为:" + tionTimeout + "秒");

ine("连接对象的数据提供者为:" + er);

ine("连接对象的为数据提供者版本为:" + Version);

if ( != ) //关闭连接

();

ine("----------关闭连接后连接对象的状态----------");

ine("n连接对象的当前状态为:" + );

}

//StateChange事件处理程序

static void oConn_StateChange(object sender, StateChangeEventArgs e)

{

ine("----------StateChange----------");

ine("提示:连接对象状态发生改变由{0}变为{1}。", alState,

tState);

}

//InfoMessage事件处理程序

static void oConn_InfoMessage(object sender, OleDbInfoMessageEventArgs e)

{

ine("----------InfoMessage----------");

ine("数据源返回的信息:" + e);

ine("返回信息的对象名称:" + );

}

}

运行结果如下:

本文由转载