C#与数据库访问技术总结(三)之 Connection对象的常用方法

说明:前面(一)(二)总结了数据库连接的概念以及连接数据库的字符串中的各个参数的含义。这篇随笔介绍connection对象的常用方法。

 Connection对象的常用方法

    Connection类型的对象用来连接数据源。在不同的数据提供者的内部,Connection对象的名称是不同的,在SQL Server Data Provider里叫SqlConnection,而在OLE DB Data Provider里叫OleDbConnection。

    下面将详细介绍Connection类型对象的常用方法。

  1.构造函数

    构造函数用来构造Connection类型的对象。对于SqlConnection类,其构造函数说明如下表所示。

函数定义

参数说明

函数说明

SqlConnection() 

不带参数

创建SqlConnection对象

SqlConnection(string connectionstring)

连接字符串

根据连接字符串,创建SqlConnection对象

复制代码
 1 第1种:
 2 
 3 String ConnectionString =”server=(local); Initial Catalog =stu;  ”;
 4 
 5 SqlConnection conn=new SqlConnection();
 6 
 7 conn.ConnectionString=ConnectionString;
 8 
 9 conn.Open();
10 
11 第2种
12 
13 String cnn=”server=(local); Initial Catalog =stu;  ”;
14 
15 SqlConnection conn=new SqlConnection(cnn);
16 
17 conn.Open();
复制代码

显然使用第2种方法输入的代码要少一点,但是两种方法执行的效率并没有什么不同,另外,

如果需要重用Connection对象去使用不同的身份连接不同的数据库时,使用第一种方法则非常有效。

例如:

复制代码
 1 SqlConnection conn=new SqlConnection();
 2 
 3 conn.ConnectionString=connectionString1;
 4 
 5 conn.Open();
 6 
 7 //访问数据库,做一些事情
 8 
 9 conn.Close();
10 
11 conn.ConnectionString=connectionString2;
12 
13 conn.Open();
14 
15 //访问数据库,做另外一些事情
16 
17 conn.Close();
复制代码

注意:只有当一个连接关闭以后才能把另一个不同的连接字符串赋值给Connection 对象。

如果不知道Connection对象在某个时候是打开是关闭时,可以检查Connection对象的State属性,它的值可以是Open,也可以是Closed,这样就可以知道连接是否是打开的。

下表说明了OleDbConnection类的构造函数。可以看出,它们和SqlConnection类的构造函数非常相近。

函数定义

参数说明

函数说明

OleDbConnection()

不带参数

创建OleDbConnection对象

OleDbConnection(string connectionstring)

连接字符串

根据连接字符串,创建OleDbConnection对象

  

  2.OpenClose方法

Open和Close方法分别用来打开和关闭数据库连接,无参无返回值。

Open方法:使用ConnectionString所指定的属性设置打开数据库连接

Close方法:关闭与数据库的连接,这是关闭任何打开连接的首选方法

注意:数据库连接是很有价值的资源,因为连接要使用到宝贵的系统资源,如内存和网络带宽,因此对数据库的连接必须小心使用,

要在最晚的时候建立连接(调用Open方法),在最早的时候关闭连接(调用Close方法)。

也就是说在开发应用程序时,不再需要数据连接时应该立刻关闭数据连接。

这点看起来很简单,要达到这个目标也不难,关键是要有这种意识。 

3、Connection对象连接数据源代码示例

    以下代码演示使用连接字符串创建数据库连接的一般方式。

复制代码
 1 //连接Access数据库
 2 
 3 string connStr="Provider= Microsoft.Jet.OleDB.4.0;Data Source=D:login.mdb"
 4 
 5 //根据字符串创建OleDbConnection连接对象
 6 
 7 OleDbConnection  objConnection=new  OleDbConnection(strConnect);      
 8 
 9 //打开数据源连接
10 
11 if(objConnection.State==ConnectionState.Closed)
12 
13 {
14 
15 objConnection.Open();
16 
17 }
18 
19 //使用结束后关闭数据源连接
20 
21 if(objConnection.State==ConnectionState.Open)
22 
23 {
24 
25 objConnection.Close();
26 
27 }
复制代码

在这段代码里的业务逻辑是:

    (1)创建连接字符串,从中可以看出Connection对象是使用OleDB类型的Data Provider,连接到D盘下login.mdb的Access数据库中。

    (2)根据连接字符串,创建Connection类型的对象,这里用到了OleDbConnection。

    (3)打开数据源的连接。

    (4)执行数据库的访问操作代码。

  (5)关闭数据源连接。

 

完整案例 

1、利用SQL Server2000建立一个数据库Student,并建立相应的表studentInfo

2、用Visual C#20XX建立一个基于Window的应用程序,并添加一个按钮。 

3、双击按钮,自动切换到后台代码编辑文件Form1.cs中,并自动添加了与此按钮的Click事件相关的处理程序button1_Click(object sender, EventArgs e)

4、在Form1.cs文件中添加如下命名空间:

   using System.Data.SqlClient;

5、在事件处理程序button1_Click中添加代码:

复制代码
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlClient;

namespace DataBase

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)

        {

            try

            {

                SqlConnection conn = new SqlConnection();

                //conn.ConnectionString = "server=(local);user id=sa;Initial Catalog=Student;pwd=;";

                conn.ConnectionString = "server=(local);Initial Catalog=Student;Integrated Security=SSPI;";

                conn.Open();

                if (conn.State == ConnectionState.Open)

                {

                    MessageBox.Show("连接已经打开");

                }

                conn.Close();

                if (conn.State == ConnectionState.Closed)

                {

                    MessageBox.Show("连接已经关闭");

                }

            }

            catch (Exception ex)

            {

                MessageBox.Show("数据库连接失败" + ex.Message);

            }

        }

    }

}
原文地址:https://www.cnblogs.com/asdyzh/p/9984004.html