01 Connection 对象概述 Connection 对象是一个连接对象,主要功能是建立与物理数据库的连接,其主要包括4种访问数据库的对象类,也可称为数据提供程序,分别介绍如下。
SQL Server 数据提供程序,位于 System.Data SqlClient 命名空间。
ODBC 数据提供程序,位于 System.Data.Odbc 命名空间。
OLEDB 数据提供程序,位于 System.Data.OleD6 命名空间。
Oracle 数据提供程序,位于 System.Data.OracleClient 命名空间。
说明 根据使用数据库的不同,引入不同的命名空间,然后通过命令空间中的 Connection 对象连接类连接数据库。例如,连接SQL Server 数据库,首先要通过using System.Data.SqlClient 命令引用SQL Server 数据提供程序,然后才能调用空间下的SqlConnection 类连接数据库。
02 连接数据库
以 SQL Server 数据库为例,如果要连接 SQL Server 数据库,必须使用 System. Data.SqlClient命令空间下的 SqlConnection 类。所以首先要通过 using System.Data.SqlClient 命令引用命名空间,连接数据库之后,通过调用 SqlConnection 对象的 Open 方法打开数据库。通过 SqlConnection 对象的 State 属性判断数据库的连接状态。 语法如下: public override ConnectionState State{ get; } 属性值:ConnectionState 枚举。 ConnectionState 枚举的值及说明如表1 所示。表1 ConnectionState 枚举的值及说明
【例1】创建一个 Windows 应用程序,在窗体中添加一个TextBox 控件、一个 Button 控件和一个 Label 控件,分别用于输入要连接的数据库名称、执行连接数据库的操作及显示数据库的连楼状态。然后引入 System.Data.SqlClient 命名空间,使用 SqlConnection 类连接数据库。
代码如下:
private void button1_Click(object sender, EventArgs e)
{
if(textBox1.Text =="") //判断是否输入数据库名称
{
MessageBox.Show("请输入要连接的数据库名称") //弹出提示信息
}
else //否则
{
try //调用 try...catch 适句
{
//声明一个字符串,用于存储连接数据库字符串
string ConStr = "server =.;database="+ textBox1.Text.Trim()+";uid=sa;pwd=";
//创建一个 SqlConnection 对象
SqlConnection conn = new SqlConnection(ConStr);
conn.Open(); //打开连接
if(conn.State == ConnectionState.Open) //判断当前连接的状态
{
//显示状态信息
label2.Text = "数据库【"+textBox1.Text.Trim()+*】已经连接并打开";
}
}
catch
{
MessageBox.Show("
}
}
}
程序的运行结果如图1 所示。
图1 连接数据库
03 关闭连接
当对数据库操作完毕后,要关闭与数据库的连接,释放占用的资源,可以通过调用 SqlCnnection对象的 Close 方法或 Dispose 方法关闭与数据库的连接,这两种方法的主要区别是:Close用于关闭一个连接,而 Dispose 方法不仅关闭一个连接,而且还清理连接所占用的资源。当使用 Close方法关闭连接后,可以再调用 Open 方法打开连接,不会产生任何错误。而如果使用 Dispose 方法关闭连接。就不可以再次直接用 Open 方法打开连接,必须再次重新初始化连接再打开。
【例1】 创建一个 Windows 应用程序,首先向窗体中添加一个TextBox 控件和一个 RichTextBox 控件,分别用于输入连接的数据库名称和显示连接信息及错误提示。然后再添加 3 个 Buton 控件,分期用于连接数据库、调用 Close 方法关闭连接,再调用 Open方法打开连接以及调用 Dispose 方法关闭并释放连接,然后调用 Open 方法打开连接。 代码如下:
SqlConnection conn; //声明一个SqlConnection 对象
private void button1_Click(object sender, EventArgs e)
{
if(textBox1.Test =="") //判断是否输入数据库名称
{
MessageBox.Show("请输入数据库名称") ; //如果没有输入则弹出提示
}
else //否则
{
try //调用 try...catch 语句
{
//建立连接数据库字符串
string str = "server=,;database=" + textBox1.Text.Trim() + ";uid=sa;pwd";
conn = new SqlConnecion(str); //创建一个 SqlConnection 对象
conn.Open(); //打开连接
if(conn.State == ConnectionState.Open) //判断当前连接状态
{
MessageBox.Show("连接成功”) //弹出提示
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message); //出现异常弹出错误信息
textBox1.Text = ""; //清空文本框
}
}
}
private void button2_Click(object sender, EventArgs e)
{
try //调用 try...catch 语句
{
string str=""; //声明一个字母串变量
conn.Close(); //使用 Close 方法关闭连接
if(conn.State == ConnectionState.Closed) //判断当前连接是否关闭
{
str="数据库已经成功关闭\n”: //如果关闭则弹出提示
}
conn.Open(); //重新打开连接
if(conn.State == ConnectionState.Open) //判断连接是否打开
{
str += "数据库已经成功打开\n"; //弹出提示
}
richTextBox1.Text = str; //向 richTextBox1 中添加提示信息
}
catch(Exception ex)
{
richTextBox1.Text = ex.Message; //出现异常,将异常添加到 richTextBox1中
}
}
private void button3_Click(object sender,EventArgs e)
{
try //调用 try...cstch 语句
{
conn.Dispose(); //使用 Dispose 方法关闭连接
conn.Open(); //重新使用 Open 方法打开会出现异常
}
catch(Exception ex)
{
richTextBox1.Text = ex.Message; //将异常显示在 richTextBox1 控件中
}
}
程序的运行结果如图2 和图3 所示。
图2 调用 Close 方法关闭连接
图3 调用 Dispose 方法关闭并释放连接
说明 在编写应用程序时,对数据库操作完成后,要及时关闭数据库的链接,以防止在对数据库进行其他操作时数据库被占用。
- END -