这个问题查找了一整天,在这个博客上找到了答案。错误不再报了,但是仍在调试中。。。 先贴solution。 -------------------------------------------------------------------------------------------------- 问题在于:state closed system.data.connectio
这个问题查找了一整天,在这个博客上找到了答案。错误不再报了,但是仍在调试中。。。
先贴solution。
--------------------------------------------------------------------------------------------------
“
问题在于:state closed system.data.connectionstate
连接没有open().
在try中加入
if (oledbconnection1.state != connectionstate.open)
oledbconnection1.open();
加上
finally
{
if (oledbconnection1.state != connectionstate.close)
{
oledbconnection1.close();
}
}
”----引自
---------------------------------------------------------------------------------------------------------------------------
做了一些小的改动,因为是在cs文件中调用自己写的一个executereader方法,因此最后的sql连接不能关闭。
贴这个方法的代码。
======================================================================
public bool executereader(string querystring,string procname,out sqldatareader myreader)
{
...
sqlconnection connection=new sqlconnection(connectionstring);
try
{
if(connection.state!=connectionstate.open)
connection.open();
sqlcommand cmd=new sqlcommand(procname,connecetion);
cmd.commandtype=commandtype.storedprocedure;
//添加存储过程参数。。。
myreader=cmd.excutereader();
}
catch(exception e)
{throw e;}
return true;
}
=============================================================
另。数据库的连接可以用下面这种:
using (sqlconnection conn=new sqlconnection (connectionstring))
{
using(sqlcommand cmd =new sqlcommand(procname,conn))
...
}
但是这里不能用。因为这种方法的连接在using结束之后自动断开,当主程序访问类中的这段方法时会报错
:“连接关闭”什么的。
using方法在其他地方还是不错的。自动断开,多好~嘿嘿
**********************************************************************
相关问题
因为这个错误,查了一下web.config里面connectionstring的问题。
以下转自。
web.config connectionstrings 数据库连接字符串的解释(转载)
先来看一下默认的连接sql server数据库配置
sqlconnectionstringbuilder实例化时需要使用connectionstring。如:sqlconnectionstringbuild builder = new sqlconnectionstringbuild(connectionstring);
一、data source
sqlconnectionstringbuilder的datasource属性,对应 connectionstring中的data source,“data source”可以由下列字符串代替:“server”,“address”,“addr”和“network address”。
data source=.\sqlexpress也可以写成这样data source=(local)\sqlexpress。
二、integrated security
sqlconnectionstringbuilder 的 integratedsecurity 属性,对应 connectionstring 中的i ntegrated security,虚拟主机,“integrated security”可以写成“trusted_connection”。
为 true 时,使用当前的 windows 帐户凭据进行身份验证,为 false 时,需要在连接中指定用户 id 和密码。可识别的值为 true、false、yes、no 以及与 true 等效的 sspi。
如果没有些则必须写上 uid=sa;pwd=123 之类的设置“uid”也可使用“user id”,“pwd”也可换为“password”。
sspi:microsoft安全支持提供器接口(sspi)是定义得较全面的公用api,用来获得验证、信息完整性、信息隐私等集成安全服务,以及用于所有分布式应用程序协议的安全方面的服务。
应用程序协议设计者能够利用该接口获得不同的安全性服务而不必修改协议本身。
三、attachdbfilename
sqlconnectionstringbuilder 的 attachdbfilename 属性,对应 connectionstring 中的 attachdbfilename,“attachdbfilename”可以写成“extended properties”,“initial file name”。
attachdbfilename 属性指定连接打开的时候动态附加到服务器上的数据库文件的位置。
这个属性可以接受数据库的完整路径和相对路径(例如使用|datadirectory|语法),在运行时这个路径会被应用程序的 app_data 目录所代替。
四、user instance
sqlconnectionstringbuilder 的 userinstance 属性,对应 connectionstring 中的 user instance ,该值指示是否将连接从默认的 sql server 实例重定向到在调用方帐户之下运行并且在运行时启动的实例。
userinstance=true 时,sqlserverexpress 为了把数据库附加到新的实例,建立一个新的进程,在打开连接的用户身份下运行。
在 asp.net 应用程序中,这个用户是本地的 aspnet 帐号或默认的 networkservice,这依赖于操作系统。
为了安全地附加非系统管理员帐号(例如asp.net帐号)提供的数据库文件,建立一个独立的 sqlserver 用户实例是必要的。
五、initial catalog 等同于 database。
六、providername 指定值“system.data.oracleclient”,该值指定 asp.net 在使用此连接字符串进行连接时应使用 ado.net system.data.oracleclient 提供程序。
ps:
datadirectory是什么?