异常详细信息: 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"];
特急谢谢
雅琦
行 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"];
特急谢谢
雅琦
所以没有打开数据库连接
if(myConnection.State==ConnectionState.Closed)
{ ///创建链接
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;
if (myConnection.State == ConnectionState.Closed)
dr = myCommand.ExecuteReader(CommandBehavior.CloseConnection);//???????????????????????
return dr;
}
改成上面的代码也还是老样子呀??
改成这样子:
public SqlDataReader GetFolders()
{ ///创建链接
SqlConnection myConnection = new SqlConnection(conString);
if(myConnection.State==ConnectionState.CLosed)//改这里
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"];
public SqlDataReader GetFolders()
{ ///创建链接
SqlConnection myConnection = new SqlConnection(conString);
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;
}
就能行,可有时就不行,还是什么呀
请给说说具体的方法。如:
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;
}
因此数据库的链接取决于你定义的DataReader对象,你用GetFolders()函数所取得的DataReader对象在使用完毕之后应该正确的DataReader.Close()。
另:if(myConnection.State==ConnectionState.Open)改为if(myConnection.State==ConnectionState.Closed)就能正确的实现,不会出现你说的一会儿行一会儿不行的不正常现象。