您的位置:程序门 -> .net技术 -> c#



不调试没有问题,单步调试反而会抛出异常


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


不调试没有问题,单步调试反而会抛出异常[已结贴,结贴人:allencpp]
发表于:2007-02-15 15:17:25 楼主
public   contractinfo   getcontractbyno(string   contractno)
{
contractinfo   contractinfo   =   new   contractinfo();

oledbcommand   select   =   new   oledbcommand();

string   cmd   =   "select   contracts.*,   customers.customername   from   contracts,   customers   "  
+   "where   contracts.customerno   =   customers.customerno   and   contracts.contractno   =   ' "   +   contractno   +   " '; ";

try
{
select.commandtext=cmd;
select.connection=conn;
conn.open();
oledbdatareader   datareader=select.EXECutereader();

if(datareader.read())
{
contractinfo.setcontractno(datareader.getstring(0));
contractinfo.setcontractname(datareader.getstring(2));
contractinfo.setcustomerno(datareader.getstring(3));
contractinfo.setbookdate(convert.todatetime(datareader[4]));
contractinfo.setaddress(datareader.getstring(5));
contractinfo.setcomtype(datareader.getstring(6));
contractinfo.setphone(datareader.getstring(7));
contractinfo.setfax(datareader.getstring(8));
contractinfo.setaccountno(datareader.getstring(9));
contractinfo.setaccountname(datareader.getstring(10));
contractinfo.setbank(datareader.getstring(11));
contractinfo.settaxno(datareader.getstring(12));
contractinfo.setcharge(datareader.getstring(13));
contractinfo.setsaletype(convert.todouble(datareader[14]));
contractinfo.setamount(convert.todouble(datareader[15]));
contractinfo.setpaymenttype(datareader.getstring(16));
contractinfo.setpaidamount(convert.todouble(datareader[17]));
contractinfo.setnotpaidamount(convert.todouble(datareader[18]));
contractinfo.setcontractstatus(convert.todouble(datareader[19]));
contractinfo.setnextpaydate(convert.todatetime(datareader[20]));
contractinfo.setprofit(convert.todouble(datareader[21]));
contractinfo.setcost(convert.todouble(datareader[22]));
contractinfo.setprocessor(datareader.getstring(23));
contractinfo.setapproval(datareader.getstring(24));
contractinfo.setupdatedate(convert.todatetime(datareader[25]));
contractinfo.setupdateuser(datareader.getstring(26));

contractinfo.setcustomername(datareader.getstring(27));

}
conn.close();

}
catch(exception   e)
{
throw   e;
}
finally
{
select.connection.dispose();

select.dispose();

conn.close();
}

return   contractinfo;
}
单步调试的时候总是在执行到datareader=select.EXECutereader();时候抛出一个异常:EXECutereader   需要打开的并且可用的连接。该连接的当前状态是   open,   fetching。真是不明白是怎么回事了!谢谢告知啊~~
发表于:2007-02-15 15:43:091楼 得分:5
select.connection=conn;
conn.open();

把这两句对调一下看看

conn.open();
select.connection=conn;
发表于:2007-02-15 17:20:142楼 得分:0
还是不行,难道这就是所谓的程序灵异事件啊?
发表于:2007-02-15 17:34:413楼 得分:5
public   void   createmyoledbdatareader(string   myselectquery,string   myconnectionstring)  
{
      oledbconnection   myconnection   =   new   oledbconnection(myconnectionstring);
      oledbcommand   mycommand   =   new   oledbcommand(myselectquery,   myconnection);
      myconnection.open();
      oledbdatareader   myreader   =   mycommand.EXECutereader(commandbehavior.closeconnection);
      while(myreader.read())  
      {
            console.writeline(myreader.getstring(0));
      }
      myreader.close();
      //implicitly   closes   the   connection   because   commandbehavior.closeconnection   was   specified.
}
看看msdn上得例子,应该是连接状态得问题
发表于:2007-02-15 17:35:154楼 得分:0
up
发表于:2007-02-15 20:01:505楼 得分:0
我改写了!依然会出现
“EXECutereader   需要打开的并且可用的连接。该连接的当前状态是   open,   fetching”
的异常,我不知道是不是oledbcommand类型的没有oledbcommand.dispose()而导致的,小弟是菜鸟,还希望各位大哥多指教!
发表于:2007-02-15 20:26:046楼 得分:5
呵呵
可不可能是系统自动回收造成的哦?
当你的数据库连接在一段时间不用的时候,系统会认为你的连接已经无用,而回收了呢?
发表于:2007-02-15 20:39:187楼 得分:5
我遇到的更多!
一些静态属性,我明明没有调用用到它,调用的时候就报未引用到实例。
发表于:2007-02-15 20:42:368楼 得分:0
调试的时候就报未引用到实例。
发表于:2007-02-16 08:40:289楼 得分:0
把改后的代码贴上来,lz
发表于:2007-02-16 10:08:4210楼 得分:0
taskinfo   taskinfo   =   new   taskinfo();
bool   result=true;

///////////////////////////////////////////////////////////////////////////
string   cmd   =   "select   *   "  
+   "   from   tasks     "
+   "   where   taskno   =   ' "   +   taskno   +   " '; ";
////////////////////////////////////////////////////////////////////////////
///
oledbcommand   select   =   new   oledbcommand(cmd,conn);

try
{
conn.open();

oledbdatareader   datareader   =   select.EXECutereader(commandbehavior.closeconnection);//在这里添加断点就会抛出异常异常就是“EXECutereader   需要打开的并且可用的连接。该连接的当前状态是   open,   fetching”
发表于:2007-02-16 10:17:3911楼 得分:0
up


快速检索

最新资讯
热门点击