在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);
}
}
运行结果如下:
新闻热点
疑难解答