B/S程序调试过程中出现如下错误:未处理的“System.InvalidOperationException”类型的异常出现在 mscorlib.dll 中。如何解决?

newtang 2003-08-19 01:34:38
错误信息如下:
未处理的“System.InvalidOperationException”类型的异常出现在 mscorlib.dll 中。

其他信息: 句柄未初始化。

出错函数为:
protected virtual void Dispose(bool Disposing)
{
//TODO:释放所有的类成员变量
if(! Disposing)
{
return;
}
// 显式关闭FOledbConnection连接,并将连接返回池中。
if(FConnection != null)
{
/*if(FConnection.State == ConnectionState.Open)
{
FConnection.Close();
}*/
FConnection.Dispose();
//FConnection = null;
}
}
...全文
559 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
newtang 2003-08-20
  • 打赏
  • 举报
回复
TO:qimini(循序渐进) :
按您给的方法还是出现同样的错误。
newtang 2003-08-20
  • 打赏
  • 举报
回复
自己顶一下
qimini 2003-08-20
  • 打赏
  • 举报
回复
把API去掉还有错误?代码是正确的,把你的项目在别人的机器上运行调试,看看是否还有错误?
newtang 2003-08-19
  • 打赏
  • 举报
回复
好像是在类被调用时发生错误
qimini 2003-08-19
  • 打赏
  • 举报
回复
1、涉及到Connection的方法,都加上这样的判断
protected OleDbConnection DbConnection
{
get
{
if(this.FConnection!=null)
return FConnection;
else
throw new NullObjectRefrenceExceptoin("Object is not exsit");<<<<<NullObjectRefrenceExceptoin忘了是哪个类了,空引用错误类
}
}
2、去掉API的调用,测试一下有无错误
newtang 2003-08-19
  • 打赏
  • 举报
回复
注明一点,出错的时候都是在从数据库中读取较多数据或与数据库交互比较频繁的过程时产生
qimini 2003-08-19
  • 打赏
  • 举报
回复
在你的类被调用时发生错误,还是在析构时?
newtang 2003-08-19
  • 打赏
  • 举报
回复
Debug模式下的错误信息一直是如下:
未处理的“System.InvalidOperationException”类型的异常出现在 mscorlib.dll 中。

其他信息: 句柄未初始化。
qimini 2003-08-19
  • 打赏
  • 举报
回复
在Debug模式下把你的详细的错误信息Post出来,还是句柄没有初始化?
newtang 2003-08-19
  • 打赏
  • 举报
回复
TO:qimini(循序渐进) :
万分感谢您的解答,但是依照您的思路我重新改了代码以后,调试错误仍然出现,错误出现时光标停留在disposed = true; 这一行。我将DbConnect类的全部源码贴在下面,请您再帮忙看看。谢谢!

public class DbConnect : IDisposable
{

[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);
private OleDbConnection FConnection;
private bool disposed;
//-----------------------------------------------------------------------
public string IniReadValue(string Section,string Key)
{
string SystemDirectory;
StringBuilder temp = new StringBuilder(255);

SystemDirectory=System.Environment.SystemDirectory;
int i = GetPrivateProfileString(Section,Key,"",temp,255,SystemDirectory+"\\DB_PTERP.ini");
return temp.ToString();
}
//-----------------------------------------------------------------------
public string DataBase()
{
string ReturnText;
ReturnText="provider=SQLOLEDB;data source="+IniReadValue("DataBase","data source")
+";initial catalog="+IniReadValue("DataBase","catalog")+";user id="
+IniReadValue("DataBase","user id")+";password="+IniReadValue("DataBase","password");
return ReturnText;
}
//-----------------------------------------------------------------------
public DbConnect()
{
// TODO: 构造函数逻辑
FConnection = new OleDbConnection();
}
//-----------------------------------------------------------------------
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
//-----------------------------------------------------------------------
protected virtual void Dispose(bool Disposing)
{
//TODO:释放所有的类成员变量
if(!this.disposed)
{
if(Disposing)
{
}
// 显式关闭FOledbConnection连接,并将连接返回池中。
if(FConnection != null)
{
FConnection.Dispose();
}
}
disposed = true;
}
//-----------------------------------------------------------------------
protected bool ConnectToDb()
{
// 数据库的连接字串
string DbConnectStr=DataBase();
try
{
// TODO: 连接到数据库
FConnection.ConnectionString = DbConnectStr;
FConnection.Open();
return true;
}
catch(System.Exception)
{
return false;
}
}
//-----------------------------------------------------------------------
//属性: 得到到数据库的连接
protected OleDbConnection DbConnection
{
get {return FConnection;}
}
}
godliu521 2003-08-19
  • 打赏
  • 举报
回复
楼上说 对
qimini 2003-08-19
  • 打赏
  • 举报
回复
BTW,FConnection的new必须在类的构造函数中执行 :)
qimini 2003-08-19
  • 打赏
  • 举报
回复
private bool disposed;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if(!this.disposed)
{

if(disposing)
{
}
if(FConnection != null)
{
FConnection.Dispose();
}

}
disposed = true;
}
newtang 2003-08-19
  • 打赏
  • 举报
回复
TO:qimini(循序渐进) :
出错的函数所在的类已经继承自IDisposeable,如下:
public class DbConnect : IDisposable
{
...
protected virtual void Dispose(bool Disposing)
{
//TODO:释放所有的类成员变量
if(! Disposing)
{
return;
}
// 显式关闭FOledbConnection连接,并将连接返回池中。
if(FConnection != null)
{
/*if(FConnection.State == ConnectionState.Open)
{
FConnection.Close();
}*/
FConnection.Dispose();
//FConnection = null;
}
}
...
}
qimini 2003-08-19
  • 打赏
  • 举报
回复
你的类必须继承自IDisposeable

110,501

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧