未处理invalidoperationexception,阅读器关闭时尝试调用Read无效 你先在else里加断点,如果执行过else再执行if的话肯定会报错,你else里把reader给关了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 read 之前,判断oleReader的状态,如果是关闭,就打开,再读取; read 之前,判断oleReader的状态,如果是关闭,就打开,再读取; 很可能你记录都读完了,然后oleReader.Close,但你循环还在继续 感觉逻辑有问题, oleReader.Close(); 不应该放在else里,因为是循环,如果read()==true 不成立,那read 就要关闭??这肯定不正确。下次读的时候 就抛出异常。 oleReader.Close(); 应该放到foreac外边。 说的很具体了啊,你for里面的else里面吧reader给关了,下一次再进行循环的时候到了if那里你直接去reader.read()就会抛异常,你在reader.read()前先判断reader是否已经关了,如果关了再打开。 reader.read()前先判断reader是否已经关了,如果关了再打开,这个语句怎么写啊 因为没有看到你的cmd里面使用了Parameters,所以注释了cmd.Parameters.Clear();,如果需要,请自己取消注释private void DeletePicOnPanel(){ string sql = "SELECT * FROM IDdata"; string name = SelectedUser.user; dbcon.oleConnection1.Open(); OleDbCommand cmd = new OleDbCommand(sql, dbcon.oleConnection1); OleDbDataReader oleReader = cmd.ExecuteReader(); oleReader.Read(); if (name != null) { foreach (Control colt in pt_pnl.Controls) { Button bt = new Button(); Label le = new Label(); if (oleReader.Read() == true) <<---问题:未处理invalidoperationexception,阅读器关闭时尝试调用Read无效 { string strtmp = (string)oleReader.GetValue(0); string ImgPath = "ID/" + strtmp + "/" + strtmp + ".jpg"; if (bt.Name == name) { bt.Name = strtmp; bt.BackgroundImage = Image.FromFile(ImgPath); name = strtmp; le.Text = strtmp; } break; } else { bt.BackgroundImage = null; bt.Dispose(); le.Text = ""; le.Dispose(); sql = string.Format(@"DELETE FROM IDdata WHERE Name='{0}'", SelectedUser.user); cmd.CommandText = sql; cmd.ExecuteNonQuery(); } oleReader.Close(); //cmd.Parameters.Clear(); } } else { MessageBox.Show("请选择用户"); } dbcon.oleConnection1.Close(); //cmd.Parameters.Clear(); cmd.Dispose();} 你另定义一个OleDbCommand用于负责删除试试,你现在但cmd只用于读。读写(删除)分离,减少数据库打开和关闭的频率,对并发和性能应该也会好些 if(reader.IsClose())reader.Open();应该就这么个意思,具体方法名字可能不大对。PS:你这个逻辑本身感觉有问题 JQuery代码不执行 打开cookie怎么没有看到保存的信息 怎样释放掉加载在内存中的xml? c#在vista系统目录下无法创建文件夹 XMLHTTP 单点登陆中的权限问题 internal 和private 有何区别?using 如何使用?有何作用? dataGrid中的数据如何存入另一个表中? C#中如何获取鼠标坐标? c# picturebox控件显示图片的问题 关于DataSet与SqlDataAdapter.Fill C# winform窗体中嵌入外部命令行窗口 C#中结构体定义跟C语言
oleReader.Close(); 应该放到foreac外边。
reader.read()前先判断reader是否已经关了,如果关了再打开,这个语句怎么写啊
{
string sql = "SELECT * FROM IDdata";
string name = SelectedUser.user;
dbcon.oleConnection1.Open();
OleDbCommand cmd = new OleDbCommand(sql, dbcon.oleConnection1);
OleDbDataReader oleReader = cmd.ExecuteReader();
oleReader.Read(); if (name != null)
{
foreach (Control colt in pt_pnl.Controls)
{
Button bt = new Button();
Label le = new Label(); if (oleReader.Read() == true) <<---问题:未处理invalidoperationexception,阅读器关闭时尝试调用Read无效
{
string strtmp = (string)oleReader.GetValue(0);
string ImgPath = "ID/" + strtmp + "/" + strtmp + ".jpg";
if (bt.Name == name)
{
bt.Name = strtmp;
bt.BackgroundImage = Image.FromFile(ImgPath);
name = strtmp;
le.Text = strtmp;
}
break;
}
else
{
bt.BackgroundImage = null;
bt.Dispose();
le.Text = "";
le.Dispose();
sql = string.Format(@"DELETE FROM IDdata WHERE Name='{0}'", SelectedUser.user);
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
oleReader.Close();
//cmd.Parameters.Clear();
}
}
else
{
MessageBox.Show("请选择用户");
} dbcon.oleConnection1.Close();
//cmd.Parameters.Clear();
cmd.Dispose();
}
reader.Open();
应该就这么个意思,具体方法名字可能不大对。
PS:你这个逻辑本身感觉有问题