asp.net连接sqlserver数据库_第1页
asp.net连接sqlserver数据库_第2页
asp.net连接sqlserver数据库_第3页
asp.net连接sqlserver数据库_第4页
asp.net连接sqlserver数据库_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ASP.NET 连接 SQL Server 数据库本文将详细介绍如何使用Connection 对象连接数据库。对于不同的.NET 数据提供者,ADO.NET 采用不同的Connection 对象连接数据库。这些Connection 对象为我们屏蔽了具体的实现细节,并提供了一种统一的实现方法。Connection 类有四种:SqlConnection , OleDbConnection ,OdbcConnection 和 OracleConnection。SqlConnection 类的对象连接SQL Server 数据库;OracleConnection 类的对象连接 Oracle 数据库;O

2、leDbConnection 类的对象连接支持 OLE DB 的数据库,如Access; 而 OdbcConnection 类的对象连接任何支持ODBC 的数据库。与数据库的所有通讯最终都是通过Connection 对象来完成的。SqlConnection 类Connection 用于与数据库“对话”,并由特定提供程序的类(如SqlConnection ) 表示。 尽管 SqlConnection 类是针对SqlServer 的,但是这个类的许多属性、方法与事件和OleDbConnection 及 OdbcConnection 等类相似。本章将重点讲解 SqlConnection 特定的属性与

3、方法,其他的Connection类你可以参考相应的帮助文档。注意:使用不同的Connection 对象需要导入不同的命名空间。OleDbConnection的命名空间为System.Data.OleDb。 SqlConnection 的命名空间为 System.Data.SqlClient。 OdbcConnection 的命名空间为System.Data.Odbc。 OracleConnection 的命名空间为System.Data.OracleClinet。 SqlConnection 属性:属性说明 ConnectionString 其返回类型为string,获取或设置用于打开SQL

4、Server 数据库的字符串。ConnectionTimeOut 其返回类型为 int, 获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。Database其返回类型为string,获取当前数据库或连接打开后要使用的数据库的名称。DataSource其返回类型为 string, 获取要连接的SQL Server 实例的名称。State其返回类型为ConnectionState,取得当前的连接状态:Broken、Closed、 Connecting、 Fetching 或Open。 ServerVersion 其返回类型为string,获取包含客户端连接的SQL Server 实例的版本的

5、字符串。PacketSize获取用来与SQL Server 的实例通信的网络数据包的大小(以字节为单位)。这个属性只适用于 SqlConnection 类型SqlConnection 方法: 方法说明Close()其返回类型为void,关闭与数据库的连接。CreateCommand()其返回类型为SqlCommand,创建并返回一个与SqlConnection 关联的SqlCommand 对象。Open()其返回类型为void,用连接字符串属性指定的属性打开数据库连接SqlConnection 事件:事件说明StateChange当事件状态更改时发生。(从 DbConnection 继承。 )

6、 InfoMessage 当SQL Server 返回一个警告或信息性消息时发生。提示:可以用事件让一个对象以某种方式通知另一对象产生某些事情。例如我们在Windows 系统中选择“开始”菜单,一旦单击鼠标时,就发生了一个事件,通知操作系统将“开始”菜单显示出来。使用 SqlConnection 对象连接SQL Server数据库我们可以用SqlConnection() 构造函数生成一个新的 SqlConnection 对象。 这个函数是重载的,即我们可以调用构造函数的不同版本。SqlConnection() 的构造函数如下表所示:构造函数说明SqlConnection () 初始化 SqlC

7、onnection 类的新实例。SqlConnection (String) 如果给定包含连接字符串的字符串,则初始化SqlConnection 类的新实例。程序代码说明: 在上述语法范例的程序代码中,我们通过使用“ new“关键字生成了一个新的 SqlConnection 对象, 并且将其命名为 mySqlConnection 。 现在我们就可以使用如下两种方式连接数据库,即采用集成的Windows 验证和使用Sql Server身份验证进行数据库的登录。集成的 Windows 身份验证语法范例stringconnectionString="server=localhost;dat

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

9、。Sql Server2005 中的 Windows 身份验证模式如下:注意:在使用集成的 Windows 验证方式时,并不需要我们输入用户名和口令,而是把登录Windows 时输入的用户名和口令传递到SqlServer。 然后 Sql Server 检查用户清单,检查其是否具有访问数据库的权限。而且数据库连接字符串是不区分大小写的。采用 Sql Server 身份验证的语法范例string connectionString ="server=YourServerName;Database=YourDBName;UID=YourS QLLoginID;PWD=YourSQLLogin

10、Password;" 如: string connectionString ="server=localhost;database=Northwind;uid=sa;pwd=sa" (或:string connectionString = "Datasource=YourServerName;Database=YourDBName;UID=YourS QLLoginID;PWD=YourSQLLoginPassword;" )程序代码说明:在上述语法范例的程序代码中,采用了使用已知的用户名和密码验证进行数据库的登录。uid 为指定的数据库用户名

11、,pwd 为指定的用户口令。为了安全起见,一般不要在代码中包括用户名和口令,你可以采用前面的集成的 Windows 验证方式或者对Web.Config 文件中的连接字符串加密的方式提高程序的安全性。Sql Server 2005 中的 Sql Server 身份验证模式如下:如果你使用其他的数据提供者的话,所产生的连接字符串也具有相类似的形式。例如我们希望以OLE DB 的方式连接到一个Oracle 数据库,其连接字符串如下:string connectionString = "datasource=localhost;initial catalog=Sales;use id=sa;

12、password=;provider=MSDAORA"程序代码说明:在上述语法范例的程序代码中,通过专门针对 Oracle 数据库的OLE DB 提供程序,实现数据库的连接。 data source 表示运行Oracle 数据库的计算机名,initialcatalog 表示所使用的数据库名。provider 表示使用的OLE DB提供程序为MSDAORA 。 Access数据库的连接字符串的形式如下:string connectionString ="provider=Microsoft.Jet.OLEDB.4.0 ;” data source=c:Northwind.md

13、b ”;程序代码说明:在上述语法范例的程序代码中,通过专门针对 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 mySq

14、lConnection = newSqlConnection(connectionString);或者写成SqlConnection mySqlConnection =newSqlConnection("server=localhost;database=Northwind;uid=sa;pwd=sa");在前面的范例中,通过使用“new“关键字生成了一个新的 SqlConnection 对象。因此我们也可以设置该对象的ConnectionString 属性, 为其指定一个数据库连接字符串。这和将数据库连接字符串传人SqlConnection()构造函数的功能是一样的。Sq

15、lConnection mySqlConnection = newSqlConnection();mySqlConnection.ConnectionString ="server=localhost;database=Northwind;uid=sa;pwd=sa"注意:只能在关闭Connection 对象时设置ConnectionString 属性。打开和关闭数据库连接生成 Connection 对象并将其设置ConnectionString 属性设置为数据库连接的相应细节之后,就可以打开数据库连接。为此可以调用Connection 对象的 Open()方法。其方法如下

16、:mySqlConnection.Open();完成数据库的连接之后,我们可以调用Connection 对象Close()方法关闭数据库连接。例如:mySqlConnection.Close();下面是一个显示如何用SqlConnection 对象连接SqlServer Northwind 数据库的实例程序,并且显示该SqlConnection 对象的一些属性。范例程序代码如下:01public partial class _Default : System.Web.UI.Page02 03 protected void Page_Load(object sender, EventArgs e

17、)04 05 /建立数据库连接字符串06 string connectionString ="server=localhost;database=Northwind;07 integrated security=SSPI"08 /将连接字符串传入SqlConnection 对象的构造函数中09 SqlConnection mySqlConnection = newSqlConnection(connectionString);10 try11 12 /打开连接13 mySqlConnection.Open();14 /利用label 控件显示mySqlConnection

18、对象的ConnectionString 属性15 lblInfo.Text = " < b> mySqlConnection 对象的ConnectionString 属性为:<b> " +16 mySqlConnection.ConnectionString + " < br> "17 lblInfo.Text += " < b> mySqlConnection 对象的 ConnectionTimeout 属性为<b> " +18 mySqlConnection.Connec

19、tionTimeout + " < br> "19 lblInfo.Text += " < b> mySqlConnection 对象的Database属性为<b> " +20 mySqlConnection.Database + " < br> "21 lblInfo.Text += " < b> mySqlConnection 对象的 DataSource 属性为<b> " +22 mySqlConnection.DataSource +

20、" < br> "23 lblInfo.Text += " < b> mySqlConnection 对象的 PacketSize属性为<b> " +24 mySqlConnection.PacketSize + " < br> "25 lblInfo.Text += " < b> mySqlConnection 对象的 ServerVersion 属性为<b> " +26 mySqlConnection.ServerVersion + &qu

21、ot; < 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 finally36 37 /关闭与数据库的连接38 mySqlConnectio

22、n.Close();39 lblInfo.Text += " < br><b>关闭连接后的mySqlConnection 对象的状态为:</b> "40 lblInfo.Text += mySqlConnection.State.ToString();41 42 43 程序代码说明:在上述范例的程序代码中,我们利用trycatch finally 对数据库连接进行异常处理。当无法连接数据库时将抛出异常,并显示出错信息,见catch 代码块所示。在此程序中,无论是否发生异常,都可以通过finally 区块关闭数据库的连接,从而节省计算机资源

23、,提高了程序的效率和可扩展性。执行结果:当然,我们还可以采用一种更加简便的方法来实现上述程序的功能。这就是将SqlConnection 对象包含到using 区块中,这样程序会自动调用 Dispose()方法释放SqlConnection 对象所占用的系统资源,无需再使用SqlConnection 对象的 Close()方法。范例程序代码如下:01 public partial class _Default :System.Web.UI.Page02 03 protected void Page_Load(object sender, EventArgs e)04 05 string conn

24、ectionString ="server=localhost;database=Northwind;06 integrated security=SSPI"07 SqlConnection mySqlConnection = newSqlConnection(connectionString);08 using (mySqlConnection)09 10 mySqlConnection.Open();11 lblInfo.Text = " < b> mySqlConnection 对象的ConnectionString 属性为:<b>

25、" +12 mySqlConnection.ConnectionString + " < br> "13 lblInfo.Text += " < b> mySqlConnection 对象的ConnectionTimeout 属性为<b> " +14 mySqlConnection.ConnectionTimeout + " < br> "15 lblInfo.Text += " < b> mySqlConnection 对象的Database属性为<

26、;b> " +16 mySqlConnection.Database + " < br> "17 lblInfo.Text += " < b> mySqlConnection 对象的 DataSource 属性为<b> " +18 mySqlConnection.DataSource + " < br> "19 lblInfo.Text += " < b> mySqlConnection 对象的 PacketSize属性为<b> &quo

27、t; +20 mySqlConnection.PacketSize + " < br> "21 lblInfo.Text += " < b> mySqlConnection 对象的ServerVersion 属性为<b> " +22 mySqlConnection.ServerVersion + " < br> "23 lblInfo.Text += " < b> mySqlConnection 对象的当前状态为 < b> "+24 mySql

28、Connection.State + " < br> "25 26 lblInfo.Text += " < br>< b>关闭连接后的mySqlConnection 对象的状态为:</b> "27 lblInfo.Text += mySqlConnection.State.ToString();28 29 程序代码说明:在上述范例的程序代码中,采用using(mySqlConnection) 的形式使得代码更加简洁,并且其最大的优点就是无需编写finally 区块代码,可以自动关闭与数据库的连接。连接池打开

29、与关闭数据库都是比较耗时的。为此,ADO.NET 自动将数据库连接存放在连接池中。连接池可以大幅度提高程序的性能和效率,因为我们不必等待建立全新的数据库连接过程,而是直接利用现成的数据库连接。注意,利用Close()方法关闭连接时,并不是实际关闭连接,而是将连接标为未用,放在连接池中,准备下一次复用。如果在连接字符串中提供相同的细节,即相同的数据库,用户名,密码等等,则可以直接取得并返回池中的连接。然后可以用这个连接访问数据库。使用SqlConnection 对象时,可以在连接字符串中指定max poolsize,表示连接池允许的最大连接数(默认为100) ,也可以指定 min pool si

30、ze 表示连接池允许的最小连接数(默认为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个 SqlConnect

31、ion 对象。池中可以存储最多10 个SqlConnection 对象。 如果要打开新的SqlConnection 对象时,池中的对象全部都在使用中,则请求要等待一个SqlConnection 对象关闭,然后才可以使用新的SqlConnection对象。如果请求等待时间超过ConnectionTimeout 属性指定的秒数,则会抛出异常。下面通过一个程序来显示连接池的性能优势。在应用此程序过程我们要先引用System.Data.SqlClinet 和 System.Text 命名空间。范例程序代码如下:01 public partial class _Default :System.Web.U

32、I.Page02 03 protected void Page_Load(object sender, EventArgs e)04 05 /设置连接池的最大连接数为,最小为06 SqlConnection mySqlConnection =new SqlConnection(07 "server=localhost;database=Northwind;integratedsecurity=SSPI;"+08 "max pool size=5;min pool size=1");09 /新建一个StringBuilder 对象10 StringBuil

33、der 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 /

34、连接所用的时间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 mySql

35、Connection.Close();26 27 /将 StringBuilder 对象的包含的字符串在label 控件中显示出来28 lblInfo.Text = htmStr.ToString();29 30 程序代码说明:在上述范例的程序代码中,我们将在连接池中重复5 次打开一个SqlConnection 对象, DateTime.Now表示当前的时间。timeTaken 表示从连接开始到打开连接所用的时间间隔。可以看出,打开第一个连接的时间比打开后续连接的时间要长,因为第一个连接要实际连接数据库。被关闭之后,这个连接存放在连接池中。再次打开连接时,只要从池中直接读取即可,速度非常快。提

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

37、 中连接字符串的设置在ASP.NET 2.0 中,使用了一种在运行时解析为连接字符串值的新的声明性表达式语法,按名称引用数据库连接字符串。连接字符串本身存储在Web.config 文件中的<connectionStrings> 配置节下面,以便易于在单个位置为应用程序中的所有页进行维护。范例程序代码如下:< ?xml version="1.0"? >configuration >connectionStrings >add name="Pubs" connectionString="Server=localho

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论