异常详细信息: System.InvalidOperationException: ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。
2007-10-10 00:50
681 查看
异常详细信息: System.InvalidOperationException: ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。
源错误:
行 232: myCommand.CommandType = CommandType.Text;
行 233: SqlDataReader dr = null;
行 234: dr = myCommand.ExecuteReader(CommandBehavior.CloseConnection);//???????????????????????
行 235:
行 236: return dr;
源文件: c:/Inetpub/wwwroot/TragramMini/WebTragMini/App_Code/Folder.cs 行: 234
堆栈跟踪:
[InvalidOperationException: ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。]
System.Data.SqlClient.SqlConnection.GetOpenConnection(String method) +861892
System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command) +9
System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async) +101
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +73
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +122
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) +62
TangramMiniWeb.Folder.GetFolders() in c:/Inetpub/wwwroot/TragramMini/WebTragMini/App_Code/Folder.cs:234
TangramMiniWeb.MailDesktop.BindFolderData() in c:/Inetpub/wwwroot/TragramMini/WebTragMini/Email/MailDesktop.aspx.cs:29
TangramMiniWeb.MailDesktop.Page_Load(Object sender, EventArgs e) in c:/Inetpub/wwwroot/TragramMini/WebTragMini/Email/MailDesktop.aspx.cs:23
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint
源码为:
public SqlDataReader GetFolders()
{
///创建链接
SqlConnection myConnection = new SqlConnection(conString);
if(myConnection.State==ConnectionState.Open)
myConnection.Open();
///定义SQL语句
string cmdText = "SELECT * FROM Folders";
SqlCommand myCommand = new SqlCommand(cmdText, myConnection);
myCommand.CommandType = CommandType.Text;
SqlDataReader dr = null;
dr = myCommand.ExecuteReader(CommandBehavior.CloseConnection);//???????????????????????
return dr;
}
private string conString = ConfigurationManager.AppSettings["EngString"];
1.if(myConnection.State==ConnectionState.Open)
2.if(myConnection.State==ConnectionState.Closed)
3.CommandBehavior.CloseConnection在MSDN中的解释为:在执行该命令时,如果关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭。
因此数据库的链接取决于你定义的DataReader对象,你用GetFolders()函数所取得的DataReader对象在使用完毕之后应该正确的DataReader.Close()。
另:if(myConnection.State==ConnectionState.Open)改为if(myConnection.State==ConnectionState.Closed)就能正确的实现,不会出现你说的一会儿行一会儿不行的不正常现象。
4.你if(myConnection.State==ConnectionState.Open) 使程序跳过了myConnection.Open()语句
所以没有打开数据库连接
最后我的解决方法为:
我的那个WEB.config的代码我是分头写的,因为这是个中文和英文相加的网站吗,所有我就把中文和英文的配制都分开了,我就又建了个webeng.config 文件最后导制这个英文的配制不能让系统默认,所有有上面的程序错误。呵呵。
我把中文 和英文的配制再放进一个文件时,那所有的数据库的连结又回到了正常 的状态。
源错误:
行 232: myCommand.CommandType = CommandType.Text;
行 233: SqlDataReader dr = null;
行 234: dr = myCommand.ExecuteReader(CommandBehavior.CloseConnection);//???????????????????????
行 235:
行 236: return dr;
源文件: c:/Inetpub/wwwroot/TragramMini/WebTragMini/App_Code/Folder.cs 行: 234
堆栈跟踪:
[InvalidOperationException: ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。]
System.Data.SqlClient.SqlConnection.GetOpenConnection(String method) +861892
System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command) +9
System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async) +101
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +73
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +122
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) +62
TangramMiniWeb.Folder.GetFolders() in c:/Inetpub/wwwroot/TragramMini/WebTragMini/App_Code/Folder.cs:234
TangramMiniWeb.MailDesktop.BindFolderData() in c:/Inetpub/wwwroot/TragramMini/WebTragMini/Email/MailDesktop.aspx.cs:29
TangramMiniWeb.MailDesktop.Page_Load(Object sender, EventArgs e) in c:/Inetpub/wwwroot/TragramMini/WebTragMini/Email/MailDesktop.aspx.cs:23
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint
源码为:
public SqlDataReader GetFolders()
{
///创建链接
SqlConnection myConnection = new SqlConnection(conString);
if(myConnection.State==ConnectionState.Open)
myConnection.Open();
///定义SQL语句
string cmdText = "SELECT * FROM Folders";
SqlCommand myCommand = new SqlCommand(cmdText, myConnection);
myCommand.CommandType = CommandType.Text;
SqlDataReader dr = null;
dr = myCommand.ExecuteReader(CommandBehavior.CloseConnection);//???????????????????????
return dr;
}
private string conString = ConfigurationManager.AppSettings["EngString"];
1.if(myConnection.State==ConnectionState.Open)
2.if(myConnection.State==ConnectionState.Closed)
3.CommandBehavior.CloseConnection在MSDN中的解释为:在执行该命令时,如果关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭。
因此数据库的链接取决于你定义的DataReader对象,你用GetFolders()函数所取得的DataReader对象在使用完毕之后应该正确的DataReader.Close()。
另:if(myConnection.State==ConnectionState.Open)改为if(myConnection.State==ConnectionState.Closed)就能正确的实现,不会出现你说的一会儿行一会儿不行的不正常现象。
4.你if(myConnection.State==ConnectionState.Open) 使程序跳过了myConnection.Open()语句
所以没有打开数据库连接
最后我的解决方法为:
我的那个WEB.config的代码我是分头写的,因为这是个中文和英文相加的网站吗,所有我就把中文和英文的配制都分开了,我就又建了个webeng.config 文件最后导制这个英文的配制不能让系统默认,所有有上面的程序错误。呵呵。
我把中文 和英文的配制再放进一个文件时,那所有的数据库的连结又回到了正常 的状态。
相关文章推荐
- 异常详细信息: System.InvalidOperationException: 对象的当前状态使该操作无效 真正的解决办法
- 异常详细信息: System.InvalidOperationException: 对象的当前状态使该操作无效
- 异常详细信息: System.InvalidOperationException: 内部连接致命错误(已解决)
- 异常详细信息: System.InvalidOperationException: 内部连接致命错误
- 异常详细信息: System.InvalidOperationException: 超时时间已到。在从池中获取连接之前超时时间已过
- 异常: System.InvalidOperationException: 对象的当前状态使该操作无效
- 要求已打开且可用的 Connection。连接的当前状态为已关闭。
- 异常详细信息: System.InvalidOperationException: WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResour
- ExecuteScalar 要求已打开且可用的 Connection。连接的当前状态为已关闭。
- 异常详细信息: System.InvalidOperationException: 在没有任何数据时进行无效的读取尝试。
- EF访问数据库报“ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。”错误
- System.InvalidOperationException: 对象的当前状态使该操作无效。
- System.InvalidOperationException: 对象的当前状态使该操作无效
- System.InvalidOperationException: 对象的当前状态使该操作无效 【大量表单数据提交】
- 异常详细信息: System.Data.SqlClient.SqlException: 无法打开物理文件 。。。 操作系统错误 32:"32(另一个程序正在使用此文件,进程无法访问。
- System.InvalidOperationException: 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭
- 异常详细信息: System.Web.HttpException: 请求在此上下文中不可用
- System.InvalidOperationException: 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。
- 异常详细信息: System.InvalidCastException: 对象不能从 DBNull 转换为其他类型——的解决方法
- 异常详细信息: System.InvalidCastException: 对象不能从 DBNull 转换为其他类型——的解决方法