冷枫@CSDN

CSharp程序员大本营:积累平凡就是积累卓越!有了翅膀,你就有了天空!钝到极点的刀才最具杀伤力——因为它是锤子!

宋巍巍ID:JavaProgramers
446216次访问,排名102好友21人,关注者56
毕业于南阳理工学院计算机系软件工程专业,一直从事于软件开发工作,编程经验5年,一线程序员出身,开发实战经验丰富,精通Asp,Asp.NET, ERP(C#.NET),基于WEB(Asp.Net)的MIS等世道上的一般编程,精通SQL Server存储过程开发,曾为一家中型商务企业软件开发工程师,软件培训师。
JavaProgramers的文章
原创 283 篇
翻译 0 篇
转载 24 篇
评论 338 篇
╄ 冷枫的公告
╄ 冷枫 Asp.NET微软MVP
本Blog技术支持QQ群
[NET技术联盟]:1908832
[冷枫开发小组]:6307410
CSharp开放源码促进会
CSharp程序员大本营
最近评论
wfdsagghf:有办法反编VB dll吗
芳芳:我用了这个软件,生成了代码,但是这些代码不可以在vs2005直接打开的。老是提示出来转换向导,但老是转换出错。难道用这个软件自动生成的代码不可以直接用vs205代开吗?
希望大虾们给我意见,我急啊啊啊啊啊!!!!!
dsa:fdsf
lvjie198405lj:不错,顶了,谢谢了
xkpkhu:wow power leveling
文章分类
收藏
    相册
    IT英雄传奇
    大学留念集
    公司一角
    旅游系列二
    旅游系列三
    旅游系列一
    [╄ 冷枫]简介
    站长简介(RSS)
    经典网站收集
    .NET分页存储过程
    AJAX中国
    DOTNET控件网
    DotNet男孩社区
    Java共舞
    Tutorails[.NET]
    中国盟动力
    冷枫技术论坛
    开发者在线
    技术无极限(RSS)
    深圳赶集网
    源码网
    软件项目网
    网上邻居
    『 天道酬勤 』(RSS)
    『 孟子E章 』(RSS)
    『 孟子E章 』
    『 邹建专栏 』(RSS)
    『webdiyer 』
    微软官方
    ASP.NET 入门教程
    webcast视频教程
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 ADO.NET的Connection对象的使用收藏

    新一篇: ADO.NET对象模型  | 旧一篇: 浅谈DataSet 的用法

            在ADO.NET对象模型中,Connection对象代表了与数据源之间的连接。.NET框架中有两个Connection对象:一个是OleDbConnection,用于大多数的数据库连接,一个是SqlConnection,是MS开发的专门用于针对SQL Server的连接。在创建Connection对象之前,你必须先引用System.Data.OleDb或者System.Data.SqlClient和System.Data三个名空间。

    1.SQL Server数据库的连接   

       你可以使用Connection对象的属性来指定数据源的位置及其它参数来连接数据库。如:SqConnection con=new SqlConnection("Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=database;use id=yourid,password=yourpassword;");

    这是连接到本地数据库,如果你想连到网络上的的数据库,就要利用集成安全性,同时忽略用户名和密码。如:

    SqConnection con=new SqlConnection("Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=database;Integrated Security=SSPI");

    如果使用的是ODBC连接到SQL Server,可以通过使用Trusted_Connection=yes;来使用网络数据库。

    2.Oracle数据库的连接:(前提:必须先安装Oracle客户端实用工具的适当版本,并创建数据库别名,接着就可以用以下的连接字符串进行连接)

    SqConnection con=new SqlConnection("Provider=MSDAORA;Data Source=dbAlias;User id=yourid,password=youpwd;);

    3.Access数据库的连接:(你可以使用以下连接字符串来连接)

    SqConnection con=new SqlConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\yourdb.mdb;User id=yourid,password=youpwd;);

    连接到数据库之后即可调用Connection对象的Open()方法来打开与数据库的连接,同理Close()方法用来关闭与数据库的连接。

    连接池:

          连接池是什么?在一个三层结构(或N层)中,当一个客户端与中间层服务器进行通讯的时候,服务器会创建一个与数据库连接,并执行操作的业务对象(也就是与数据库连接的实例),同时会创建一个Connection对象,在放在一个池中(实际上是一个线程)。当释放这个实例的时候,此实例便关闭,此时并没有真正的关闭数据连接,而是将Connection对象标记为关闭后存储在池中。如果这时再来启动一个新的业务对象,这时就会检查现有的连接,如果池中有打开的连接,即使用它,否则再创建一个新连接。

    可能你会觉得很奇怪,如果这样,那池中不是有很多的对象,岂不是会浪费很多的资源,这个问题的解决方案是你可以设置与数据库的特定连接时间(默认60秒),如果在这个时间内未被使用,.NET提供就会关闭此连接。

          如何打开连接池?默认情况下是打开的.

          如何关闭连接池?可以使用OleDbConnection.ReleaseConnectionPool()方法来关闭连接池,更或者你可以在OLE DB连接字符串中加上OLE DB Services= - 4;在用SqlConnection对象时可在连接符中加上Pooling=False。这时你再调用Close()时候便会真正地关闭与数据库的连接。

    (注1:可以使用SQL事件探查器或性能监视器来观察连接到数据库中的连接数目,以识别连接是否真正关闭或是只是放入池中。)

    (注2:可以显式调用Dispose()方法在垃圾收集器回收之前释放资源,但如果你只是将Connection对象设为NULL的话,是不会断开与数据源的连接的)

          利用Connection对象来创建Command对象:(ADO.NET中用Command对象来执行数据查询,更新)例 :

    SqConnection con=new SqlConnection("Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=database;Integrated Security=SSPI");

    using (OleDbCommand cmd=con.CreateCommadn())

    {

          cmd.CommandText="select * from table";

          cmd.ExecuteNonQuery();

    }

    (注:此处使用using 的好处是在进行此次操作后便可释放资源。)

    利用Connection对象来创建Transaction对象:(Transaction对象是ADO.NET中的事务管理对象)

    例:

    SqConnection con=new SqlConnection("Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=database;Integrated Security=SSPI");

    con.Open();

    OleDbTransaction tran=con.BeginTransaction(); (注:调用此方法会在连接时返回一个新的打开的Transaction对象来进行事务管理)

    (注:事务是指一组单一实体运行的语句,可以确保数据的完整性,防止因系统故障或其它原因而引起的数据丢失。概念很抽象,呵呵,看下去就明白了)

    事务有ACID四个属性(即原子性,一致性,隔离性,持久性):

    原子性指在执行事务过程中,这个过程要么成功执行,要么不执行。

    一致性指事务前和事务后的数据的一致性,也就是如果事务成功执行的话,系统就返回成功的状态,即所有数据的改变标记为已完成,如没完成事务,即回滚,并回到先前的合法状态。

    隔离性指一个事务内的任何变化都独立于其它的事务(相对于两个事务的说法)

    持久性指事务是持续的,也就是事务成功完成后的改变是永久的。

    (注:事务有手动和自动两种,本文的主题不在此,事务的介绍在其它篇章会涉及到)

          取得数据库的架构信息:

      有时你会发觉有需要获取数据库的架构信息来方便程序的运行。可使用OleDbConnection对象的GetOleDbSchemaTable()方法来获取,它需要一个参数用来作返回的架构信息的过滤器,即只获取表中的列或行信息,不写此参数则获取整个表所有列的信息。

    例:

    OleDbConnectioncon=new OleDbConnection("Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=database;Integrated Security=SSPI");

    con.Open();

    DataTable dt=con.GetOleDbSchemaTable(OleDbSchamaGuid,null);

    foreach(DataRow row in dt.Rows)

    Console.WriteLine(row["column_name"].ToString());

    ---------------------------------------------------------------

    关于AD.NET的连接对象还有很多有用的方法,具体查MSDN。

    发表于 @ 2005年04月21日 02:15:00|评论(loading...)|编辑

    新一篇: ADO.NET对象模型  | 旧一篇: 浅谈DataSet 的用法

    评论

    #QUESTION!!! 发表于2005-04-23 11:08:00  IP: 202.103.41.*
    Dim con As New SqlConnection('server=localhost;database=Northwind;_
    Integrated Security=True")
    我已经引用了命名空间。SQL验证模式也是WIN集成的。但却显示

    D:\VB\1\WindowsApplication2\Form1.vb(68): 名称“Integrated”未声明。
    D:\VB\1\WindowsApplication2\Form1.vb(68): “System.Security”是命名空间,因此不是有效表达式。

    请高手指教啊!!
    #第三条腿儿 发表于2005-04-24 10:41:00  IP: 222.88.226.*
    名称“Integrated”未声明,提示很明显嘛,你仔细看看错误提示,想想应该不难解决是吧,如果你看见错误提示只当没有看见,那我都无语了噢,搞程序错错不怕的。
    #哎 发表于2008-05-17 10:41:26  IP: 123.9.60.*
    "精通"这俩个字请不要乱用,你太厉害了!商品不是这样推销的... ...
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © ╄ 冷枫