ASPNET20连接SQLServer数据库详解共13页.docx
- 文档编号:28706172
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:14
- 大小:139.78KB
ASPNET20连接SQLServer数据库详解共13页.docx
《ASPNET20连接SQLServer数据库详解共13页.docx》由会员分享,可在线阅读,更多相关《ASPNET20连接SQLServer数据库详解共13页.docx(14页珍藏版)》请在冰豆网上搜索。
ASPNET20连接SQLServer数据库详解共13页
本文将详细介绍如何使用Connection对象连接数据库。
对于不同的数据提供者,ADO采用不同的Connection对象连接数据库。
这些Connection对象为我们屏蔽了具体的实现细节,并提供了一种统一的实现方法。
Connection类有四种:
SqlConnection,OleDbConnection,OdbcConnection和OracleConnection。
SqlConnection类的对象连接SQLServer数据库;OracleConnection类的对象连接Oracle数据库;
OleDbConnection类的对象连接支持OLEDB的数据库,如Access;而OdbcConnection类的对象连接任何支持ODBC的数据库。
与数据库的所有通讯最终都是通过Connection对象来完成的。
SqlConnection类
Connection用于与数据库“对话”,并由特定提供程序的类(如SqlConnection)表示。
尽管SqlConnection类是针对SqlServer的,但是这个类的许多属性、方法与事件和OleDbConnection及OdbcConnection等类相似。
本章将重点讲解SqlConnection特定的属性与方法,其他的Connection类你可以参考相应的帮助文档。
注意:
使用不同的Connection对象需要导入不同的命名空间。
OleDbConnection的命名空间为System.Data.OleDb。
SqlConnection的命名空间为System.Data.SqlClient。
OdbcConnection的命名空间为System.Data.Odbc。
OracleConnection的命名空间为System.Data.OracleClinet。
SqlConnection属性:
属性说明ConnectionString其返回类型为string,获取或设置用于打开SQLServer数据库的字符串。
ConnectionTimeOut其返回类型为int,获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。
Database其返回类型为string,获取当前数据库或连接打开后要使用的数据库的名称。
DataSource其返回类型为string,获取要连接的SQLServer实例的名称。
State其返回类型为ConnectionState,取得当前的连接状态:
Broken、Closed、Connecting、Fetching或Open。
ServerVersion其返回类型为string,获取包含客户端连接的SQLServer实例的版本的字符串。
PacketSize获取用来与SQLServer的实例通信的网络数据包的大小(以字节为单位)。
这个属性只适用于SqlConnection类型
SqlConnection方法:
方法说明Close()其返回类型为void,关闭与数据库的连接。
CreateCommand()其返回类型为SqlCommand,创建并返回一个与SqlConnection关联的SqlCommand对象。
Open()其返回类型为void,用连接字符串属性指定的属性打开数据库连接
SqlConnection事件:
事件说明StateChange当事件状态更改时发生。
(从DbConnection继承。
)InfoMessage当SQLServer返回一个警告或信息性消息时发生。
提示:
可以用事件让一个对象以某种方式通知另一对象产生某些事情。
例如我们在Windows系统中选择“开始”菜单,一旦单击鼠标时,就发生了一个事件,通知操作系统将“开始”菜单显示出来。
使用SqlConnection对象连接SQLServer数据库
我们可以用SqlConnection()构造函数生成一个新的SqlConnection对象。
这个函数是重载的,即我们可以调用构造函数的不同版本。
SqlConnection()的构造函数如下表所示:
构造函数说明SqlConnection()初始化SqlConnection类的新实例。
SqlConnection(String)如果给定包含连接字符串的字符串,则初始化SqlConnection类的新实例。
假设我们导入了System.Data.SqlClient命名空间,则可以用下列语句生成新的SqlConnection对象:
SqlConnectionmySqlConnection=newSqlConnection();
程序代码说明:
在上述语法范例的程序代码中,我们通过使用“new“关键字生成了一个新的SqlConnection对象,并且将其命名为mySqlConnection。
现在我们就可以使用如下两种方式连接数据库,即采用集成的Windows验证和使用SqlServer身份验证进行数据库的登录。
集成的Windows身份验证语法范例
stringconnectionString="server=localhost;database=Northwind;
integratedsecurity=SSPI";
程序代码说明:
在上述语法范例的程序代码中,我们设置了一个针对SqlServer数据库的连接字符串。
其中server表示运行SqlServer的计算机名,由于在本书中,ASP程序和数据库系统是位于同一台计算机的,所以我们可以用localhost取代当前的计算机名。
database表示所使用的数据库名,这里设置为SqlServer自带的一个示例数据库--Northwind。
由于我们希望采用集成的Windows验证方式,所以设置integratedsecurity为SSPI即可。
SqlServer2019中的Windows身份验证模式如下:
注意:
在使用集成的Windows验证方式时,并不需要我们输入用户名和口令,而是把登录Windows时输入的用户名和口令传递到SqlServer。
然后SqlServer检查用户清单,检查其是否具有访问数据库的权限。
而且数据库连接字符串是不区分大小写的。
采用SqlServer身份验证的语法范例
stringconnectionString="server=localhost;database=Northwind;uid=sa;pwd=sa";
程序代码说明:
在上述语法范例的程序代码中,采用了使用已知的用户名和密码验证进行数据库的登录。
uid为指定的数据库用户名,pwd为指定的用户口令。
为了安全起见,一般不要在代码中包括用户名和口令,你可以采用前面的集成的Windows验证方式或者对Web.Config文件中的连接字符串加密的方式提高程序的安全性。
SqlServer2019中的SqlServer身份验证模式如下:
如果你使用其他的数据提供者的话,所产生的连接字符串也具有相类似的形式。
例如我们希望以OLEDB的方式连接到一个Oracle数据库,其连接字符串如下:
stringconnectionString="datasource=localhost;initialcatalog=Sales;
useid=sa;password=;provider=MSDAORA";
程序代码说明:
在上述语法范例的程序代码中,通过专门针对Oracle数据库的OLEDB提供程序,实现数据库的连接。
datasource表示运行Oracle数据库的计算机名,initialcatalog表示所使用的数据库名。
provider表示使用的OLEDB提供程序为MSDAORA。
Access数据库的连接字符串的形式如下:
stringconnectionString="provider=Microsoft.Jet.OLEDB.4.0;
@”datasource=c:
\DataSource\Northwind.mdb”;
程序代码说明:
在上述语法范例的程序代码中,通过专门针对Access数据库的OLEDB提供程序,实现数据库的连接。
这使用的的OLEDB提供程序为Microsoft.Jet.OLEDB.4.0,并且数据库存放在c:
\DataSource目录下,其数据库文件为Northwind.mdb。
现在我们就可以将数据库连接字符串传人SqlConnection()构造函数,例如:
stringconnectionString="server=localhost;database=Northwind;uid=sa;pwd=sa";
课本、报刊杂志中的成语、名言警句等俯首皆是,但学生写作文运用到文章中的甚少,即使运用也很难做到恰如其分。
为什么?
还是没有彻底“记死”的缘故。
要解决这个问题,方法很简单,每天花3-5分钟左右的时间记一条成语、一则名言警句即可。
可以写在后黑板的“积累专栏”上每日一换,可以在每天课前的3分钟让学生轮流讲解,也可让学生个人搜集,每天往笔记本上抄写,教师定期检查等等。
这样,一年就可记300多条成语、300多则名言警句,日积月累,终究会成为一笔不小的财富。
这些成语典故“贮藏”在学生脑中,自然会出口成章,写作时便会随心所欲地“提取”出来,使文章增色添辉。
SqlConnectionmySqlConnection=newSqlConnection(connectionString);
或者写成
SqlConnectionmySqlConnection=newSqlConnection(
"server=localhost;database=Northwind;uid=sa;pwd=sa");
在前面的范例中,通过使用“new“关键字生成了一个新的SqlConnection对象。
因此我们也可以设置该对象的ConnectionString属性,为其指定一个数据库连接字符串。
这和将数据库连接字符串传人SqlConnection()构造函数的功能是一样的。
SqlConnectionmySqlConnection=newSqlConnection();
mySqlConnection.ConnectionString="server=localhost;database=Northwind;uid=sa;pwd=sa";
注意:
只能在关闭Connection对象时设置ConnectionString属性。
打开和关闭数据库连接
生成Connection对象并将其设置ConnectionString属性设置为数据库连接的相应细节之后,就可以打开数据库连接。
为此可以调用Connection对象的Open()方法。
其方法如下:
mySqlConnection.Open();
完成数据库的连接之后,我们可以调用Connection对象的Close()方法关闭数据库连接。
例如:
mySqlConnection.Close();
下面是一个显示如何用SqlConnection对象连接SqlServerNorthwind数据库的实例程序,并且显示该SqlConnection对象的一些属性。
范例程序代码如下:
01publicpartialclass_Default:
System.Web.UI.Page
02{
03protectedvoidPage_Load(objectsender,EventArgse)
04{
05//建立数据库连接字符串
06stringconnectionString="server=localhost;database=Northwind;
07integratedsecurity=SSPI";
08//将连接字符串传入SqlConnection对象的构造函数中
09SqlConnectionmySqlConnection=newSqlConnection(connectionString);
10try
11{
12//打开连接
13mySqlConnection.Open();
14//利用label控件显示mySqlConnection对象的ConnectionString属性
15lblInfo.Text="<b>mySqlConnection对象的ConnectionString属性为:
<b>"+
16mySqlConnection.ConnectionString+"<br>";
17lblInfo.Text+="<b>mySqlConnection对象的ConnectionTimeout属性为<b>"+
18mySqlConnection.ConnectionTimeout+"<br>";
19lblInfo.Text+="<b>mySqlConnection对象的Database属性为<b>"+
20mySqlConnection.Database+"<br>";
21lblInfo.Text+="<b>mySqlConnection对象的DataSource属性为<b>"+
22mySqlConnection.DataSource+"<br>";
23lblInfo.Text+="<b>mySqlConnection对象的PacketSize属性为<b>"+
24mySqlConnection.PacketSize+"<br>";
25lblInfo.Text+="<b>mySqlConnection对象的ServerVersion属性为<b>"+
26mySqlConnection.ServerVersion+"<br>";
27lblInfo.Text+="<b>mySqlConnection对象的当前状态为<b>"+
28mySqlConnection.State+"<br>";
29}
30catch(Exceptionerr)
31{
32lblInfo.Text="读取数据库出错";
33lblInfo.Text+=err.Message;
34}
35finally
36{
37//关闭与数据库的连接
38mySqlConnection.Close();
39lblInfo.Text+="<br><b>关闭连接后的mySqlConnection对象的状态为:
</b>";
40lblInfo.Text+=mySqlConnection.State.ToString();
41}
42}
43}
程序代码说明:
在上述范例的程序代码中,我们利用trycatchfinally对数据库连接进行异常处理。
当无法连接数据库时将抛出异常,并显示出错信息,见catch代码块所示。
在此程序中,无论是否发生异常,都可以通过finally区块关闭数据库的连接,从而节省计算机资源,提高了程序的效率和可扩展性。
执行结果:
当然,我们还可以采用一种更加简便的方法来实现上述程序的功能。
这就是将SqlConnection对象包含到using区块中,这样程序会自动调用Dispose()方法释放SqlConnection对象所占用的系统资源,无需再使用SqlConnection对象的Close()方法。
范例程序代码如下:
01publicpartialclass_Default:
System.Web.UI.Page
02{
03protectedvoidPage_Load(objectsender,EventArgse)
04{
05stringconnectionString="server=localhost;database=Northwind;
06integratedsecurity=SSPI";
07SqlConnectionmySqlConnection=newSqlConnection(connectionString);
08using(mySqlConnection)
09{
10mySqlConnection.Open();
11lblInfo.Text="<b>mySqlConnection对象的ConnectionString属性为:
<b>"+
12mySqlConnection.ConnectionString+"<br>";
13lblInfo.Text+="<b>mySqlConnection对象的ConnectionTimeout属性为<b>"+
14mySqlConnection.ConnectionTimeout+"<br>";
15lblInfo.Text+="<b>mySqlConnection对象的Database属性为<b>"+
16mySqlConnection.Database+"<br>";
17lblInfo.Text+="<b>mySqlConnection对象的DataSource属性为<b>"+
18mySqlConnection.DataSource+"<br>";
19lblInfo.Text+="<b>mySqlConnection对象的PacketSize属性为<b>"+
20mySqlConnection.PacketSize+"<br>";
21lblInfo.Text+="<b>mySqlConnection对象的ServerVersion属性为<b>"+
22mySqlConnection.ServerVersion+"<br>";
23lblInfo.Text+="<b>mySqlConnection对象的当前状态为<b>"+
24mySqlConnection.State+"<br>";
25}
26lblInfo.Text+="<br><b>关闭连接后的mySqlConnection对象的状态为:
</b>";
27lblInfo.Text+=mySqlConnection.State.ToString();
28}
29}
程序代码说明:
在上述范例的程序代码中,采用using(mySqlConnection)的形式使得代码更加简洁,并且其最大的优点就是无需编写finally区块代码,可以自动关闭与数据库的连接。
连接池
打开与关闭数据库都是比较耗时的。
为此,ADO自动将数据库连接存放在连接池中。
连接池可以大幅度提高程序的性能和效率,因为我们不必等待建立全新的数据库连接过程,而是直接利用现成的数据库连接。
注意,利用Close()方法关闭连接时,并不是实际关闭连接,而是将连接标为未用,放在连接池中,准备下一次复用。
如果在连接字符串中提供相同的细节,即相同的数据库,用户名,密码等等,则可以直接取得并返回池中的连接。
然后可以用这个连接访问数据库。
使用SqlConnection对象时,可以在连接字符串中指定maxpoolsize,表示连接池允许的最大连接数(默认为100),也可以指定minpoolsize表示连接池允许的最小连接数(默认为0)。
下面的代码指定了SqlConnection对象的maxpoolsize为10,minpoolsize为5。
SqlConnectionmySqlConnection=newSqlConnection("server=localhost;database=Northwind;
integratedsecurity=SSPI;"+"maxpoolsize=10;minpoolsize=5");
程序代码说明:
在上述范例的程序代码中,程序最初在池中生成5个SqlConnection对象。
池中可以存储最多10个SqlConnection对象。
如果要打开新的SqlConnection对象时,池中的对象全部都在使用中,则请求要等待一个SqlConnection对象关闭,然后才可以使用新的SqlConnection对象。
如果请求等待时间超过ConnectionTimeout属性指定的秒数,则会抛出异常。
下面通过一个程序来显示连接池的性能优势。
在应用此程序过程我们要先引用System.Data.SqlClinet和System.Text命名空间。
范例程序代码如下:
01publicpartialclass_Default:
System.Web.UI.Page
02{
03protectedvoidPage_Load(objectsender,EventArgse)
04{
05//设置连接池的最大连接数为5,最小为1
06SqlConnectionmySqlConnection=newSqlConnection(
07"server=localhost;database=Northwind;integratedsecurity=SSPI;"+
08"maxpoolsize=5;minpoolsize=1");
09//新建一个StringBuilder对象
10StringBuilderhtmStr=newStringBuilder("");
其实,任何一门学科都离不开死记硬背,关键是记忆有技巧,“死记”之后会“活用”。
不记住那些基础知识,怎么会向高层次进军?
尤其是语文学科涉猎的范围很广,要真正提高学生的写作水平,单靠分析文章的写作技巧是远远不够的,必须从基础知识抓起,每天挤一点时间让学生“死记”名篇佳句、名言警句,以及丰富的词语、新颖的材料等。
这样,就会在有限的时间、空间里给学生的脑海里注入无限的内容。
日积月累,积少成多,从而收到水滴石穿,绳锯木断的功效。
11for(intcount=1;count<=5;count++)
12{
13//使用Append()方法追加字符串到StringBuilder对象的结尾处
14htmStr.Append("连接对象"+count);
15htmStr.Append("<br>");
16//设置一个连接的开始时间
17DateTimestart=DateTime.Now;
18mySqlConnection.Open();
19//连接所用的时间
20TimeSpantimeTaken=DateTime.Now-start;
21htmStr.Append("连接时间为"+timeTaken.Milliseconds+"毫秒");
22htmStr.Append("<br>");
23htmStr.Append("mySqlConnection对象的状态为"+my
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ASPNET20 连接 SQLServer 数据库 详解 13