ExecuteScalar 要求已打开且可用的连接。连接的当前状态为已关闭(已连接)

问题描述

我用asp.net做了一个管理系统,在每次编译后,布署到IIS,第一次加载时,可能需要编译有点缓慢,然后我反复点菜单,链接到页面,偶尔随机会报这两个错ExecuteScalar要求已打开且可用的连接。连接的当前状态为已关闭ExecuteScalar要求已打开且可用的连接。连接的当前状态为已连接我的代码如下publicintGetRecorders(stringsql){SqlConnectionconn=Connection;SqlCommandcmd=newSqlCommand("selectcount(*)from("+sql+")a",conn);try{intt=Convert.ToInt32(cmd.ExecuteScalar());returnt;}catch{throw;}finally{cmd.Dispose();conn.Close();conn.Dispose();}}为什么会有这样了,现在我的操作系统是win764位,数据库是SqlServer2008,电脑CPU是4核。会不会是多线程的问题?请问各位有何解决办法,因为报错是偶然的,调试时,又不一定会碰到这个错

解决方案

解决方案二:
SqlConnectionconn=Connection;SqlCommandcmd=newSqlCommand("selectcount(*)from("+sql+")a",conn);这两句之间加上conn.open();把连接打开
解决方案三:
建议你用usingpublicstaticobjectExecuteScalar(stringsqlStr){objectobj=newobject();using(OleDbConnectionconn=newOleDbConnection(connectionString)){using(OleDbCommandcomm=newOleDbCommand()){conn.Open();comm.Connection=conn;comm.CommandType=CommandType.Text;comm.CommandText=sqlStr;obj=comm.ExecuteScalar();}}returnobj;}
解决方案四:
publicstaticobjectExecuteScalar(stringsqlStr){objectobj=newobject();using(OleDbConnectionconn=newOleDbConnection(connectionString)){using(OleDbCommandcomm=newOleDbCommand()){conn.Open();comm.Connection=conn;comm.CommandType=CommandType.Text;comm.CommandText=sqlStr;obj=comm.ExecuteScalar();}}returnobj;}顶楼上的,加个conn.open()就好
解决方案五:
using(OleDbConnectionconn=newOleDbConnection(connectionString)){}使用时打开连接,使用完了自动关闭
解决方案六:
感谢各位,原因找到了,因为ado数据访问类,我只生成了一个静态实例,所以访问频繁时,会造成多个线程同时访问一段代码。。。
解决方案七:
本人菜鸟,楼主怎么解决的啊
解决方案八:
引用楼主longhun522008的回复:

我用asp.net做了一个管理系统,在每次编译后,布署到IIS,第一次加载时,可能需要编译有点缓慢,然后我反复点菜单,链接到页面,偶尔随机会报这两个错ExecuteScalar要求已打开且可用的连接。连接的当前状态为已关闭ExecuteScalar要求已打开且可用的连接。连接的当前状态为已连接我的代码如下publicintGetRecorders(stringsql){SqlConnectionconn=Connection;SqlCommandcmd=newSqlCommand("selectcount(*)from("+sql+")a",conn);try{intt=Convert.ToInt32(cmd.ExecuteScalar());returnt;}catch{throw;}finally{cmd.Dispose();conn.Close();conn.Dispose();}}为什么会有这样了,现在我的操作系统是win764位,数据库是SqlServer2008,电脑CPU是4核。会不会是多线程的问题?请问各位有何解决办法,因为报错是偶然的,调试时,又不一定会碰到这个错

估计你的连接对象是静态的数据库连接即使你搞成静态的,连接也不会持久化,相反连接还容易丢,数据库连接建议搞成局部变量,用完就端开,连接被连接池回收反复利用。
解决方案九:
引用5楼longhun522008的回复:

感谢各位,原因找到了,因为ado数据访问类,我只生成了一个静态实例,所以访问频繁时,会造成多个线程同时访问一段代码。。。

恩,那个东西确实不能使用静态的,加上using就好了。

时间: 2024-07-31 03:53:09

ExecuteScalar 要求已打开且可用的连接。连接的当前状态为已关闭(已连接)的相关文章

.net连接SQLSERVER数据库,网页上不停的刷新就报错"ExecuteScalar 要求已打开且可用的连接。连接的当前状态为打开。"

问题描述 .net连接SQLSERVER数据库,网页上定时刷新就报错"ExecuteScalar要求已打开且可用的连接.连接的当前状态为打开."实在找不出问题出在哪了,请大家帮帮忙吧"/Web"应用程序中的服务器错误.--------------------------------------------------------------------------------ExecuteScalar要求已打开且可用的连接.连接的当前状态为打开.说明:执行当前Web

name = mycmd.ExecuteScalar().ToString();ExecuteScalar 要求已打开且可用的 Connection。连接的当前

问题描述 publicpartialclass登录界面:Form{SqlCommandmycmd=newSqlCommand();SqlConnectionmyconn=newSqlConnection();public登录界面(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){stringmystr;mystr="DataSource=zoufengrui;InitialCatalog=Carecas

executereader 要求已打开且可用的连接。连接的当前状态为已关闭。

问题描述 executereader要求已打开且可用的连接.连接的当前状态为已关闭.myConnection=newSqlConnection();myConnection.ConnectionString="server=localhost;uid=sa;pwd=sa;database=student";sqlCommand=newSqlCommand();sqlCommand.Connection=myConnection;sqlCommand.CommandType=Comman

sqlconnection-executereader 要求已打开并可用的connection

问题描述 executereader 要求已打开并可用的connection private void button1_Click(object sender, EventArgs e) { SqlHelper.con.Open(); //这个是自己写的类 //里面就两句话 ( public static string connstring = "Data Source=.;Initial Catalog=students;Persist Security Info=True;User ID=s

executereader 要求已打开并可用的connection

问题描述 privatevoidbutton1_Click(objectsender,EventArgse){SqlHelper.con.Open();//这个是自己写的类//里面就两句话(publicstaticstringconnstring="DataSource=.;InitialCatalog=students;PersistSecurityInfo=True;UserID=sa;Password=Rootroot123";publicstaticSqlConnectionc

因为不存在已打开的单元"

问题描述 WPF 无法关闭撤消单元,因为不存在已打开的单元 XAML代码: <DataGridTextColumn Width="100" Binding="{Binding SalePrice, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat={0:0.00}}" Header="销售价"> <DataGridTextColumn.HeaderTem

iis-在vs打开请求ssl正常,部署在IIS上请求出现&amp;amp;quot;基础连接已经关闭:意外连接被关闭&amp;amp;quot;

问题描述 在vs打开请求ssl正常,部署在IIS上请求出现"基础连接已经关闭:意外连接被关闭" 10C (HttpWebResponse)webrequest.GetResponse()响应的时候报错.估计是IIS配置问题? 解决方案 IIS的超时如果设置的太短,而网络访问时间太长,会导致这个问题. 解决方案二: 说错了,是asp.net执行超时限制 参考 http://www.cnblogs.com/kingboy2008/p/3711143.html 解决方案三: 超时了,或服务端

如何获得已打开目录的目录句柄?

问题描述 如何获得已打开目录的目录句柄? 我想用ReadDirectoryChangesW()来获取文件操作信息,但是其中的一个参数是监控目录的句柄,都说用createfile函数来得到目录的句柄,但是如果是已经用鼠标打开的目录,又该怎样获得其句柄呢? 解决方案 你用CreateFile()一样可以获取到对应的句柄,用共享读的方式等,用鼠标打开,不会影响

数据库xxx已打开,并且一次只能有一个用户访问。 (Microsoft SQL Server,错误: 924)

操作数据库失败,提示如下错误: 数据库xxx已打开,并且一次只能有一个用户访问. (Microsoft SQL Server,错误: 924) 重启数据库问题仍然存在.可执行以下sql解决: USE master; GODECLARE @SQL VARCHAR(MAX); SET @SQL='' SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID) FROM master..sysprocesses WHERE dbid=DB_ID('库名'); EXEC(@SQL);