电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> 数据库
ASP.NET2.0连接SQL Server数据库详解-.NET教程,Asp.Net开发
作者:网友供稿 点击:75
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 

本文将详细介绍如何使用connection对象连接数据库。对于不同的.net数据提供者,ado.net采用不同的connection对象连接数据库。这些connection对象为我们屏蔽了具体的实现细节,并提供了一种统一的实现方法。

  connection类有四种:sqlconnection,oledbconnection,odbcconnection和oracleconnection。

  sqlconnection类的对象连接sql server数据库;oracleconnection 类的对象连接oracle数据库;

  oledbconnection类的对象连接支持ole db的数据库,如access;而odbcconnection类的对象连接任何支持odbc的数据库。与数据库的所有通讯最终都是通过connection对象来完成的。

  sqlconnection类

  connection 用于与数据库“对话”,并由特定提供程序的类(如 sqlconnection)表示。尽管sqlconnection类是针对sql server的,但是这个类的许多属性、方法与事件和oledbconnection及odbcconnection等类相似。本章将重点讲解sqlconnection特定的属性与方法,其他的connection类你可以参考相应的帮助文档。

  注意:使用不同的connection对象需要导入不同的命名空间。oledbconnection的命名空间为system.data.oledb。sqlconnection的命名空间为system.data.sqlclient。odbcconnection的命名空间为system.data.odbc。oracleconnection的命名空间为system.data.oracleclinet。

  sqlconnection属性:

属性 说明
connectionstring 其返回类型为string,获取或设置用于打开 sql server 数据库的字符串。
connectiontimeout 其返回类型为int,获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。
database 其返回类型为string,获取当前数据库或连接打开后要使用的数据库的名称。
datasource 其返回类型为string,获取要连接的 sql server 实例的名称。
state 其返回类型为connectionstate,取得当前的连接状态:broken、closed、connecting、fetching或open。
serverversion 其返回类型为string,获取包含客户端连接的 sql server 实例的版本的字符串。
packetsize 获取用来与 sql server 的实例通信的网络数据包的大小(以字节为单位)。这个属性只适用于sqlconnection类型

  sqlconnection方法:

方法 说明
close() 其返回类型为void,关闭与数据库的连接。
createcommand() 其返回类型为sqlcommand,创建并返回一个与 sqlconnection 关联的 sqlcommand 对象。
open() 其返回类型为void,用连接字符串属性指定的属性打开数据库连接

  sqlconnection事件:

事件 说明
statechange 当事件状态更改时发生。 (从 dbconnection 继承。)
infomessage 当 sql server 返回一个警告或信息性消息时发生。

  提示:可以用事件让一个对象以某种方式通知另一对象产生某些事情。例如我们在windows系统中选择“开始”菜单,一旦单击鼠标时,就发生了一个事件,通知操作系统将“开始”菜单显示出来。

  使用sqlconnection对象连接sql server数据库

  我们可以用sqlconnection()构造函数生成一个新的sqlconnection对象。这个函数是重载的,即我们可以调用构造函数的不同版本。sqlconnection()的构造函数如下表所示:

构造函数 说明
sqlconnection () 初始化 sqlconnection 类的新实例。
sqlconnection (string) 如果给定包含连接字符串的字符串,则初始化 sqlconnection 类的新实例。

  程序代码说明:在上述语法范例的程序代码中,我们通过使用“new“关键字生成了一个新的sqlconnection对象,并且将其命名为mysqlconnection。

  现在我们就可以使用如下两种方式连接数据库,即采用集成的windows验证和使用sql server身份验证进行数据库的登录。

  集成的windows身份验证语法范例

string connectionstring="server=localhost;database=northwind;
integrated security=sspi";

  程序代码说明:在上述语法范例的程序代码中,我们设置了一个针对sql server数据库的连接字符串。其中server表示运行sql server的计算机名,由于在本书中,asp.net程序和数据库系统是位于同一台计算机的,所以我们可以用localhost取代当前的计算机名。database表示所使用的数据库名,这里设置为sql server自带的一个示例数据库--northwind。由于我们希望采用集成的windows验证方式,所以设置 integrated security为sspi即可。

  sql server 2005中的windows身份验证模式如下:

  注意:在使用集成的windows验证方式时,并不需要我们输入用户名和口令,而是把登录windows时输入的用户名和口令传递到sql server。然后sql server检查用户清单,检查其是否具有访问数据库的权限。而且数据库连接字符串是不区分大小写的。

  采用sql server身份验证的语法范例

string connectionstring = "server=localhost;database=northwind;uid=sa;pwd=sa";

  程序代码说明:在上述语法范例的程序代码中,采用了使用已知的用户名和密码验证进行数据库的登录。uid为指定的数据库用户名,pwd为指定的用户口令。为了安全起见,一般不要在代码中包括用户名和口令,你可以采用前面的集成的windows验证方式或者对web.config文件中的连接字符串加密的方式提高程序的安全性。

  sql server 2005中的sql server身份验证模式如下:

  如果你使用其他的数据提供者的话,所产生的连接字符串也具有相类似的形式。例如我们希望以ole db的方式连接到一个oracle数据库,其连接字符串如下:

string connectionstring = "data source=localhost;initial catalog=sales;
use id=sa;password=;provider=msdaora";

  程序代码说明:在上述语法范例的程序代码中,通过专门针对oracle数据库的ole db提供程序,实现数据库的连接。data source 表示运行oracle数据库的计算机名,initial catalog表示所使用的数据库名。provider表示使用的ole db提供程序为msdaora。

  access数据库的连接字符串的形式如下:

string connectionstring = "provider=microsoft.jet.oledb.4.0;
@”data source=c:\datasource\northwind.mdb”;

  程序代码说明:在上述语法范例的程序代码中,通过专门针对access数据库的ole db提供程序,实现数据库的连接。这使用的的ole db提供程序为microsoft.jet.oledb.4.0,并且数据库存放在c:\datasource目录下,其数据库文件为northwind.mdb。

  现在我们就可以将数据库连接字符串传人sqlconnection()构造函数,例如:

string connectionstring = "server=localhost;database=northwind;uid=sa;pwd=sa";
sqlconnection mysqlconnection = new sqlconnection(connectionstring);

  或者写成

sqlconnection mysqlconnection =new sqlconnection(
"server=localhost;database=northwind;uid=sa;pwd=sa");

  在前面的范例中,通过使用“new“关键字生成了一个新的sqlconnection对象。因此我们也可以设置该对象的connectionstring属性,为其指定一个数据库连接字符串。这和将数据库连接字符串传人sqlconnection()构造函数的功能是一样的。

sqlconnection mysqlconnection = new sqlconnection();
mysqlconnection.connectionstring = "server=localhost;database=northwind;uid=sa;pwd=sa";

  注意:只能在关闭connection对象时设置connectionstring属性。

 

  打开和关闭数据库连接

  生成connection对象并将其设置connectionstring属性设置为数据库连接的相应细节之后,就可以打开数据库连接。为此可以调用connection对象的open()方法。其方法如下:

mysqlconnection.open();

  完成数据库的连接之后,我们可以调用connection对象的close()方法关闭数据库连接。例如:

mysqlconnection.close();

  下面是一个显示如何用sqlconnection对象连接sql server northwind数据库的实例程序,并且显示该sqlconnection对象的一些属性。

  范例程序代码如下:

01 public partial class _default : system.web.ui.page
02 {
03 protected void page_load(object sender, eventargs e)
04 {
05 //建立数据库连接字符串
06 string connectionstring = "server=localhost;database=northwind;
07 integrated security=sspi";
08 //将连接字符串传入sqlconnection对象的构造函数中
09 sqlconnection mysqlconnection = new sqlconnection(connectionstring);
10 try
11 {
12 //打开连接
13 mysqlconnection.open();
14 //利用label控件显示mysqlconnection对象的connectionstring属性
15 lblinfo.text = "<b>mysqlconnection对象的connectionstring属性为:<b>" +
16 mysqlconnection.connectionstring + "<br>";
17 lblinfo.text += "<b>mysqlconnection对象的connectiontimeout属性为<b>" +
18 mysqlconnection.connectiontimeout + "<br>";
19 lblinfo.text += "<b>mysqlconnection对象的database属性为<b>" +
20 mysqlconnection.database + "<br>";
21 lblinfo.text += "<b>mysqlconnection对象的datasource属性为<b>" +
22 mysqlconnection.datasource + "<br>";
23 lblinfo.text += "<b>mysqlconnection对象的packetsize属性为<b>" +
24 mysqlconnection.packetsize + "<br>";
25 lblinfo.text += "<b>mysqlconnection对象的serverversion属性为<b>" +
26 mysqlconnection.serverversion + "<br>";
27 lblinfo.text += "<b>mysqlconnection对象的当前状态为<b>" +
28 mysqlconnection.state + "<br>";
29 }
30 catch (exception err)
31 {
32 lblinfo.text = "读取数据库出错";
33 lblinfo.text += err.message;
34 }
35 finally
36 {
37 //关闭与数据库的连接
38 mysqlconnection.close();
39 lblinfo.text += "<br><b>关闭连接后的mysqlconnection对象的状态为:</b>";
40 lblinfo.text += mysqlconnection.state.tostring();
41 }
42 }
43 }

  程序代码说明:在上述范例的程序代码中,我们利用try catch finally对数据库连接进行异常处理。当无法连接数据库时将抛出异常,并显示出错信息,见catch代码块所示。在此程序中,无论是否发生异常,都可以通过finally区块关闭数据库的连接,从而节省计算机资源,提高了程序的效率和可扩展性。

  执行结果:


  当然,我们还可以采用一种更加简便的方法来实现上述程序的功能。这就是将sqlconnection对象包含到using区块中,这样程序会自动调用dispose()方法释放sqlconnection对象所占用的系统资源,无需再使用sqlconnection对象的close()方法。

  范例程序代码如下:

01 public partial class _default : system.web.ui.page
02 {
03 protected void page_load(object sender, eventargs e)
04 {
05 string connectionstring = "server=localhost;database=northwind;
06 integrated security=sspi";
07 sqlconnection mysqlconnection = new sqlconnection(connectionstring);
08 using (mysqlconnection)
09 {
10 mysqlconnection.open();
11 lblinfo.text = "<b>mysqlconnection对象的connectionstring属性为:<b>" +
12 mysqlconnection.connectionstring + "<br>";
13 lblinfo.text += "<b>mysqlconnection对象的connectiontimeout属性为<b>" +
14 mysqlconnection.connectiontimeout + "<br>";
15 lblinfo.text += "<b>mysqlconnection对象的database属性为<b>" +
16 mysqlconnection.database + "<br>";
17 lblinfo.text += "<b>mysqlconnection对象的datasource属性为<b>" +
18 mysqlconnection.datasource + "<br>";
19 lblinfo.text += "<b>mysqlconnection对象的packetsize属性为<b>" +
20 mysqlconnection.packetsize + "<br>";
21 lblinfo.text += "<b>mysqlconnection对象的serverversion属性为<b>" +
22 mysqlconnection.serverversion + "<br>";
23 lblinfo.text += "<b>mysqlconnection对象的当前状态为<b>"+
24 mysqlconnection.state + "<br>";
25 }
26 lblinfo.text += "<br><b>关闭连接后的mysqlconnection对象的状态为:</b>";
27 lblinfo.text += mysqlconnection.state.tostring();
28 }
29 }

  程序代码说明:在上述范例的程序代码中,采用using(mysqlconnection)的形式使得代码更加简洁,并且其最大的优点就是无需编写finally区块代码,可以自动关闭与数据库的连接。

 

  连接池

  打开与关闭数据库都是比较耗时的。为此,ado.net自动将数据库连接存放在连接池中。连接池可以大幅度提高程序的性能和效率,因为我们不必等待建立全新的数据库连接过程,而是直接利用现成的数据库连接。注意,利用close()方法关闭连接时,并不是实际关闭连接,而是将连接标为未用,放在连接池中,准备下一次复用。

  如果在连接字符串中提供相同的细节,即相同的数据库,用户名,密码等等,则可以直接取得并返回池中的连接。然后可以用这个连接访问数据库。

  使用sqlconnection对象时,可以在连接字符串中指定max pool size,表示连接池允许的最大连接数(默认为100),也可以指定min pool size表示连接池允许的最小连接数(默认为0)。下面的代码指定了sqlconnection对象的max pool size为10,min pool size为5。

sqlconnection mysqlconnection = new sqlconnection("server=localhost;database=northwind;
integrated security=sspi;"+"max pool size=10;min pool size=5");

  程序代码说明:在上述范例的程序代码中,程序最初在池中生成5个sqlconnection对象。池中可以存储最多10个sqlconnection对象。如果要打开新的sqlconnection对象时,池中的对象全部都在使用中,则请求要等待一个sqlconnection对象关闭,然后才可以使用新的sqlconnection对象。如果请求等待时间超过connectiontimeout属性指定的秒数,则会抛出异常。

  下面通过一个程序来显示连接池的性能优势。在应用此程序过程我们要先引用system.data.sqlclinet和system.text命名空间。

  范例程序代码如下:

01 public partial class _default : system.web.ui.page
02 {
03 protected void page_load(object sender, eventargs e)
04 {
05 //设置连接池的最大连接数为5,最小为1
06 sqlconnection mysqlconnection =new sqlconnection(
07 "server=localhost;database=northwind;integrated security=sspi;"+
08 "max pool size=5;min pool size=1");
09 //新建一个stringbuilder对象
10 stringbuilder htmstr = new stringbuilder("");
11 for (int count = 1; count <= 5; count++)
12 {
13 //使用append()方法追加字符串到stringbuilder对象的结尾处
14 htmstr.append("连接对象 "+count);
15 htmstr.append("<br>");
16 //设置一个连接的开始时间
17 datetime start = datetime.now;
18 mysqlconnection.open();
19 //连接所用的时间
20 timespan timetaken = datetime.now - start;
21 htmstr.append("连接时间为 "+timetaken.milliseconds+"毫秒");
22 htmstr.append("<br>");
23 htmstr.append("mysqlconnection对象的状态为" + mysqlconnection.state);
24 htmstr.append("<br>");
25 mysqlconnection.close();
26 }
27 //将stringbuilder对象的包含的字符串在label控件中显示出来
28 lblinfo.text = htmstr.tostring();
29 }
30 }

  程序代码说明:在上述范例的程序代码中,我们将在连接池中重复5次打开一个sqlconnection对象,datetime.now表示当前的时间。timetaken表示从连接开始到打开连接所用的时间间隔。可以看出,打开第一个连接的时间比打开后续连接的时间要长,因为第一个连接要实际连接数据库。被关闭之后,这个连接存放在连接池中。再次打开连接时,只要从池中直接读取即可,速度非常快。

  提示:string 对象是不可改变的。每次使用 system.string 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 string 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 system.text.stringbuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 stringbuilder 类可以提升性能。append 方法可用来将文本或对象的字符串表示形式添加到由当前 stringbuilder 对象表示的字符串的结尾处。

  执行结果:

  asp.net 2.0中连接字符串的设置

  在asp.net 2.0中,使用了一种在运行时解析为连接字符串值的新的声明性表达式语法,按名称引用数据库连接字符串。连接字符串本身存储在 web.config 文件中的 <connectionstrings> 配置节下面,以便易于在单个位置为应用程序中的所有页进行维护。

  范例程序代码如下:

<?xml version="1.0"?>
<configuration>
<connectionstrings>
<add name="pubs" connectionstring="server=localhost;
integrated security=true;database=pubs;persist security info=true"
providername="system.data.sqlclient" />
<add name="northwind" connectionstring="server=localhost;
integrated security=true;database=northwind;persist security info=true"
providername="system.data.sqlclient" />
</connectionstrings>
<system.web>
<pages stylesheettheme="default"/>
</system.web>
</configuration>

  程序代码说明:在上述范例的程序代码中,我们在web.config文件中的<connectionstrings> 配置节点下面设置了两个数据库连接字符串,分别指向pubs和northwind两个示例数据库。注意,在2.0中引进了数据源控件,例如sqldatasource 控件,我们可以将sqldatasource 控件的 connectionstring 属性被设置为表达式 <%$ connectionstrings:pubs %>,该表达式在运行时由 asp.net 分析器解析为连接字符串。还可以为sqldatasource 的 providername 属性指定一个表达式,例如 <%$ connectionstrings:pubs.providername %>。其具体的用法和新特征将在以后的章节进行详细的介绍。现在有个基础的了解即可。

  当然,我们也可以用下面的方式从配置文件直接读取数据库连接字符串。首先我们需要引用using system.web.configuration命名空间,该命名空间包含用于设置 asp.net 配置的类。

string connectionstring =configurationmanager.connectionstrings["northwind"].connectionstring;

  程序代码说明:在上述范例的程序代码中,我们可以利用connectionstrings["northwind"]读取相应的northwind字符串。同理以可以利用connectionstrings["pubs"]读取相应的pubs字符串。  
文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·数据库开发个人总结(ADO.NET小结)-.NET教程,数据库应用
·怎么由DataSet将数据导入Excel?-.NET教程,数据库应用
·动态创建SQL Server数据库、表、存储过程-ASP教程,数据库相关
·Win32环境下动态链接库(DLL)编程原理-.NET教程,数据库应用
·封装的ADO.NET对数据库操作经典类-.NET教程,数据库应用
·在DataGridView中获得DataGridViewCheckBoxColumn的状态-ASP教程,数据库相关
·DataGrid使用心得(附大量代码)-ASP教程,数据库相关
·用代码创建DataGrid的多链接及checkbox事件响应-.NET教程,数据库应用
·ADO.NET 的最佳实践技巧-.NET教程,数据库应用
·转载: 用纯ASP代码实现图片上传并存入数据库中

最新文章
·根据数据表中数据,生成Powerpoint幻灯片-ASP教程,数据库相关
·DataGrid中的按钮反选事件与NamingContainer(命名容器)-downmoon-ASP教程,数据库相关
·使用用VB处理MYSQL数据库中二进制数据问题-.NET教程,VB.Net语言
·关于DataGridView中如何接收处于编辑状态下的当前信息-ASP教程,数据库相关
·在DataGridView中获得DataGridViewCheckBoxColumn的状态-ASP教程,数据库相关
·.net下访问Access数据库需要注意的问题-.NET教程,Asp.Net开发
·ActiveMQ4.1+Spring2.0的POJO JMS方案(上)-.NET教程,数据库应用
·ASP.NET 2.0中直接将Access数据库导入到Excel文件中-.NET教程,Asp.Net开发
·NET(C#)连接各类数据库-集锦-.NET教程,C#语言
·ASP.NET2.0连接SQL Server数据库详解-.NET教程,Asp.Net开发


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号