ADO.NET入门教程(四) 品味Connection对象

摘要

前几篇文章,我都没有详细讲解Data Provider核心对象,因为我希望在讲解这些对象之前,让大家对一些基础的概念有很好的认识。在上一篇文章《你必须知道的ADO.NET(三) 连接字符串,你小觑了吗》中,我详细讲解了连接字符串,相信大家都和我一样意识到它的重要性了。如果说连接字符串是打开数据源大门的钥匙,那么我今天要讲解的则是如何用这把钥匙打开数据源的大门。作为Data Provider的第一核心对象,Connection对象肩负起连接数据源的重任。下面就让我们好好认识这位重量级人物吧!


目录


1. 理解Connection对象

Connection对象,顾名思义,表示与特定数据源的连接。如果把数据源比作大门,那么连接字符串则是钥匙,而连接对象则是拿着钥匙开门的人。对于ADO.NET而言,不同的数据源,都对应着不同的Connection对象。具体Connection对象如下表:

名称 命名空间 描述
SqlConnection System.Data.SqlClient 表示与SQL Server的连接对象  
OleDbConnection System.Data.OleDb 表示与OleDb数据源的连接对象                   
OdbcConnection System.Data.Odbc 表示与ODBC数据源的连接对象                                                                         
OracleConnection System.Data.OracleClient 表示与Orale数据库的连接对象

不管哪种连接对象,它都继承于DbConnection类。我们看看DbConnection类的实现结构:

public abstract class DbConnection : Component,     IDbConnection, IDisposable

从上面,我们可以看出DbConnection是抽象基类,并且继承Compoent,IDbConnection,IDisposable类。由于DbConnection类是抽象基类,因此它不能实例化。DbConnection类封装了很多重要的方法和属性,下面我将详细讲解几个重要的方法和属性。

2. 必须掌握的几个方法

Open: 使用 ConnectionString 所指定的设置打开数据库连接。

Dispose: 释放由 Component 使用的所有资源。

Close: 关闭与数据库的连接。 此方法是关闭任何已打开连接的首选方法。Close 方法回滚任何挂起的事务。 然后,它将连接释放到连接池,或者在连接池被禁用的情况下关闭连接。

3. 必须掌握的几个属性

Database: 在连接打开之后获取当前数据库的名称,或者在连接打开之前获取连接字符串中指定的数据库名。

DataSource: 获取要连接的数据库服务器的名称。

ConnectionTimeOut: 获取在建立连接时终止尝试并生成错误之前所等待的时间。

ConnectionString: 获取或设置用于打开连接的字符串。

State: 获取描述连接状态的字符串。

4. 说说ConnectionState

上面我们知道,State属性描述了与数据源的连接的当前状态。ConnectionState是一个枚举类型。它包括以下成员:

Closed: 连接处于关闭状态。

Open: 连接处于打开状态。

Connecting: 连接对象正在与数据源连接。

Executing: 连接对象正在执行命令。

Fetching: 连接对象正在检索数据。

Broken: 与数据源的连接中断。

5. 实例:连接SQL Server的SqlConnection对象

上面说了那么多理论知识,下面就讲一个连接SQL Server的实例吧!代码如下:

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Data; 6 using System.Data.SqlClient; 7  8 namespace Connection 9 {10     class Program11     {12         static void Main(string[] args)13         {14             //构造连接字符串15             SqlConnectionStringBuilder connStr = new SqlConnectionStringBuilder();16             connStr.DataSource = @".\SQLEXPRESS";17             connStr.InitialCatalog = "master";18             connStr.IntegratedSecurity = true;19 20             SqlConnection conn = new SqlConnection();//创建连接对象21             conn.ConnectionString = connStr.ConnectionString;//设置连接字符串22 23             conn.Open();//打开连接24 25             if(conn.State == ConnectionState.Open)26             {27                 Console.WriteLine("Database is linked.");28                 Console.WriteLine("\nDataSource:{0}",conn.DataSource);29                 Console.WriteLine("Database:{0}",conn.Database);30                 Console.WriteLine("ConnectionTimeOut:{0}",conn.ConnectionTimeout);31             }32 33             conn.Close();//关闭连接34             conn.Dispose();//释放资源35 36             if(conn.State == ConnectionState.Closed)37             {38                 Console.WriteLine("\nDatabase is closed.");39             }40 41             Console.Read();42         }43     }44 }

结果:

6. 编写优雅而又安全的代码

(1)添加try...catch块

我们知道连接数据库时,可能出现异常,因此需要添加异常处理。对于C#来说,典型的异常处理是添加try...catch代码块。finially是可选的。finially是指无论代码是否出现异常都会执行的代码块。而对数据库连接资源来说,是非常宝贵的。因此,我们应当确保打开连接后,无论是否出现异常,都应该关闭连接和释放资源。所以,我们必须在finially语句块中调用Close方法关闭数据库连接。

 1 SqlConnection conn = new SqlConnection(connStr); 2 try 3 { 4       conn.Open(); 5 } 6 catch(Exception ex) 7 { 8           ;//todo 9 }10 finially11 {12      conn.Close();13 }

(2)使用using语句

另外一种优雅的方法,则是使用using语句。如果你还不熟悉using语法,我就再啰嗦几句。using语句的作用是确保资源使用后,并很快释放它们。using语句帮助减少意外的运行时错误带来的潜在问题,它整洁地包装了资源的使用。具体来说,它执行以下内容:

  • 分配资源。
  • 把Statement放进try块。
  • 创建资源的Dispose方法,并把它放进finally块。

因此,上面的语句等同于:

1 using(SqlConnection conn = new SqlConnection(connStr))2 {3      ;//todo4 }

文章转载于:http://liuhaorain.cnblogs.com 
时间: 2024-08-03 07:15:35

ADO.NET入门教程(四) 品味Connection对象的相关文章

ADO.NET入门教程(五) 细说数据库连接池

题外话 通过前几章的学习,不知道大家对ADO.NET有一定的了解了没有.撇开文章质量不讲,必须肯定的是,我是用心去写每一篇文章的.无论是是在排版上,还是在内容选取上我都花了不少心思.我希望通过本系列文章,无论是新手还是老手,在ADO.NET上都能有所收获.如果大家觉得有帮助,我希望能得到您的推荐和关注,让我知道您对我的肯定.如果大家觉得我写的不好,我也很乐意听取批评的意见,让我们一起进步. 摘要 今天我要讲的是数据库连接池.说实话,我表示鸭梨很大.因为相比其他章节来说,连接池相对来说难理解一点.

RabbitMQ入门教程(四):工作队列(Work Queues)

原文:RabbitMQ入门教程(四):工作队列(Work Queues) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/78596426 分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 工作队列 使用工作队列实现任务分发的功能,一个队列的优点就是很容易处理并行化的工作能力,但是如果我们积累了大量的工作,我们

BootStrap入门教程 (四)

上讲回顾:Bootstrap组件丰富同时具有良好可扩展性,能够很好地应用在生产环境.这些组件包括按钮(Button),导航(Navigation),缩略图( thumbnails),提醒(Alert),进度条(progress bar)等,能够很好减少前端工程师的代码量,实现更加丰富充实的页面. Bootstrap作为一套良好的前端工具,要实现现代的动态页面效果,javascript插件是必不可少的.它提供了12个基于JQuery类库的插件,包括模态窗口(Modals),滚动监控(Scrolls

Git的入门教程<四>

Git 的入门教程<四> 5> git分支的管理 git默认的有一个主分支叫做master,随着每次的提交,master主分支会形成一条线,而HEAD是指向当前的主分支master的,一般来说,我们将master分支作为向外发布的主分支,而开发的时候会新建一个分支或者好多分支,作为开发分支,等到开发分支完成,在一次性的想master主分支上合并,并进行发布. 5.1 git 分支的创建.删除.切换 git branch dev //创建分支 git checkout dev //切换分支

无废话ExtJs 入门教程四[表单:FormPanel]

无废话ExtJs 入门教程四[表单:FormPanel] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在窗体里加了个表单.如下所示代码区的第28行位置,items:form. 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&

BootStrap入门教程 (四) :JQuery类库插件(模态窗口,滚动监控,标签效果,提示效果,“泡芙”效果,警告区域,折叠效果,旋转木马,输入提示)

上讲回顾:Bootstrap组件丰富同时具有良好可扩展性,能够很好地应用在生产环境.这些组件包括按钮(Button),导航(Navigation),缩略图( thumbnails),提醒(Alert),进度条(progress bar)等,能够很好减少前端工程师的代码量,实现更加丰富充实的页面. Bootstrap作为一套良好的前端工具,要实现现代的动态页面效果,javascript插件是必不可少的.它提供了12个基于JQuery类库的插件,包括模态窗口(Modals),滚动监控(Scrolls

Elasticsearch入门教程(四):Elasticsearch文档CURD

原文:Elasticsearch入门教程(四):Elasticsearch文档CURD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/79217590 一: 新增文档POST /{index}/{type} 或 PUT /{index}/{type}/{id} 注意:新增文档时可以显式指定id,id可以是数字也可以是字符串,如果不显示指

ADO.NET入门教程(六) 谈谈Command对象与数据检索

摘要 到目前为止,我相信大家对于ADO.NET如何与外部数据源建立连接以及如何提高连接性能等相关知识已经牢固于心了.连接对象作为ADO.NET的主力先锋,为用户与数据库交互搭建了扎实的桥梁.它的一生是平凡而又伟大的,总是尽自己最大的努力为用户搭建一条通往数据库的平坦大道.相比连接对象来说,Command对象似乎耀眼的多.Command对象在ADO.NET世界里总是忙忙碌碌,它就像一个外交官,为用户传达了所有操作数据库的信息. 目录 准备 什么是Command对象? 必须掌握的几个属性 必须掌握的

ADO.NET入门教程(七) 谈谈Command对象高级应用

摘要 在上一篇文章<你必须知道的ADO.NET(六) 谈谈Command对象与数据检索>中,我详细讲解了Command对象的基础知识以及基本用法.作为ADO.NET中最具执行力的对象,Command对象实属变幻莫测.在本文中,我将与大家一起探讨Command对象的高级应用与技巧. 目录 异步执行命令 请使用参数化查询 获取插入行的ID 总结 1. 异步执行命令 在ADO.NET 2.0版本之前,执行Command对象命令时,需要等待命令完成才能执行其他操作.比如,执行ExcuteNonQuer