COM 对象与其基础 RCW 分开后就不能再使用??

时间:2022-09-29 12:55:01
系统登录时检测用户名密码
void BtnLoginClick(object sender, System.EventArgs e)
{
  cmd.CommandText="select * from admin where name=? and password=?";
  cmd.Parameters.AddWithValue("name",this.txtUserName.Text);
  cmd.Parameters.AddWithValue("password",this.txtPassWord.Text);
this.conn.Open();
dr=cmd.ExecuteReader();
if(!dr.Read())
MessageBox.Show("用户名或密码错误!");
else{
MessageBox.Show("登录成功!");
}

conn.Close();
}
第一次点击按钮时没问题,当第二次点击时出现以下错误信息:
Exception System.Runtime.InteropServices.InvalidComObjectException was thrown in debuggee:
COM 对象与其基础 RCW 分开后就不能再使用。

9 个解决方案

#1


编程环境:NET2.0,C#,SharpDevelop

#2


顶起...
------------------------------------------------------------------------------------ 
100M.Net空间+50M企业邮局=60元/年
100M.Net空间+国际*域名=100元/年
国际*域名.com.net.cn=50元/年
本站申请域名可绑定免费10M Asp.Net空间
1000M.Net空间 + 100M MsSql数据库 + 1000M企业邮局 + *域名=600元/年
数据库 企业邮局 网站推广 整机租用 美国空间 网站建设 均有售
还有很多优惠套餐提供给各个用户层.
有意者可联系电话:021-64802212 传真:021-64802212 
咨询信箱:info@kingtoo.com 咨询OICQ:68311305,379620139 81778640 
 

#3


怎么沉得这么快啊
小弟第一次提问,请各位星星给个面子

#4


是不是分太少了,再加50
不知道分用完后去哪里赚了

#5


再顶起
难道没有人遇到过?
在1.1版中好像没有出现过这样的问题

#6


是不是dr没有关掉的原因

#7


找到原因了。
应该是NET 2.0垃圾回收的新特性导致的。
第一次运行按钮事件能够正常运行,因为OleDbCommand对象 cmd是在事件运行之前在外部创建的,事件运行结束后,系统销毁cmd对象,释放内存。
当第二次运行的时候,对象没有被创建(只在外部创建了一次),因此出错。

RCW是连接COM与.NET客户端的桥梁,其中一块陆地(COM)沉掉了,整个系统也就出错了。
不知道这样分析对不对。

#8


帮顶的兄弟辛苦了,送点分。

#9


结帖后还能回复吗?试一下

#1


编程环境:NET2.0,C#,SharpDevelop

#2


顶起...
------------------------------------------------------------------------------------ 
100M.Net空间+50M企业邮局=60元/年
100M.Net空间+国际*域名=100元/年
国际*域名.com.net.cn=50元/年
本站申请域名可绑定免费10M Asp.Net空间
1000M.Net空间 + 100M MsSql数据库 + 1000M企业邮局 + *域名=600元/年
数据库 企业邮局 网站推广 整机租用 美国空间 网站建设 均有售
还有很多优惠套餐提供给各个用户层.
有意者可联系电话:021-64802212 传真:021-64802212 
咨询信箱:info@kingtoo.com 咨询OICQ:68311305,379620139 81778640 
 

#3


怎么沉得这么快啊
小弟第一次提问,请各位星星给个面子

#4


是不是分太少了,再加50
不知道分用完后去哪里赚了

#5


再顶起
难道没有人遇到过?
在1.1版中好像没有出现过这样的问题

#6


是不是dr没有关掉的原因

#7


找到原因了。
应该是NET 2.0垃圾回收的新特性导致的。
第一次运行按钮事件能够正常运行,因为OleDbCommand对象 cmd是在事件运行之前在外部创建的,事件运行结束后,系统销毁cmd对象,释放内存。
当第二次运行的时候,对象没有被创建(只在外部创建了一次),因此出错。

RCW是连接COM与.NET客户端的桥梁,其中一块陆地(COM)沉掉了,整个系统也就出错了。
不知道这样分析对不对。

#8


帮顶的兄弟辛苦了,送点分。

#9


结帖后还能回复吗?试一下