程序中用oraclecommand的executeNonQuery()执行,可以看到的是返回的执行结果的条数,但是执行结果却不对。
而同样的Sql在PL/SQL dev中执行却能得到正确的结果,不知道为什么??请达人指点一下思路。delete from LIMCK_SECDEAL;insert into LIMCK_SECDEAL (
  select t.deal_no, s.name, t.ccy,e.amount, e.comments, md.buy_sell,t.deal_dt, t.mature_dt, t.entity, t.cparty, d.ext_name dealer
  from deals t, sectype s, events e, cparty c, mmdeals md, dealer d 
  where t.sectype = s.thekey and t.deal_no = e.deal_no and t.cparty = c.thekey and t.deal_no = md.deal_no and t.dealer = d.thekey and
        s.name not like 'DEPODE%' and s.name not like 'LOANLO%' and t.trans_type = 'SE' and
        t.deal_dt>= sysdate -6 and t.deal_dt<= sysdate and         
        c.name not like 'Z-%' and c.name <> 'DUMMY COUNTERPARTY' and 
        e.comments in('BOND SETTLEMENT','DISCOUNT AMOUNT') and t.in_use = 'Y'
);commit;

解决方案 »

  1.   

    你确信二条SQL都是一样的吗.绝不可能出现这样的情况
      

  2.   

    把整个执行SQL语句的代码贴出来,再 看看,现在看没啥问题,不好对比
      

  3.   

    应该来说都是一样的
    可能是不是你程序中写SQL语句的时候分割没注意好
      

  4.   

    SQL是完全一样的,我通过调试获得cmdtext拷到了PL/SQL中运行的。
    另外有个问题希望大家注意一下,我在程序中也不是一直有问题,只是每天早上启动的时候总是会有几次有问题
    代码如下:
    public  bool ExecuteNonQueryTrans(string connString, CommandType cmdType, string [] cmdText)
    {
    using(OracleConnection conn=new OracleConnection(connString))
    {
    if (conn.State != ConnectionState.Open)
    conn.Open();
    OracleTransaction trans=conn.BeginTransaction();
    OracleCommand cmd=conn.CreateCommand();
    cmd.Transaction=trans;
    int i=0;
    try
    {

    for(i=0;i<cmdText.Length;i++)
    {
    if(cmdText[i].ToUpper().IndexOf("COMMIT")!=-1)
    {
    trans.Commit();
    System.Threading.Thread.Sleep(300);
    trans=conn.BeginTransaction();
    cmd.Transaction=trans;
    }
    else
    {
    if(cmdText[i]!=""&&cmdText[i]!=" ")
    {
    cmd.CommandText = cmdText[i];
    int j=cmd.ExecuteNonQuery();
    this.frm.txtInfo.Text+="\r\n"+j.ToString();
    }
    }
    }
    trans.Commit();
    }
    catch(Exception ex)
    {
    trans.Rollback();
    return false;
    }
    finally
    {
    conn.Close();
    }
    return true;
    } }
      

  5.   

    很有可能是事务的问题,主贴的三条语句是否是通过string [] cmdText分三条传递的?
      

  6.   

    你在程序里面是执行一条语句事务就COMMIT一次,但在PL/SQL DEV里是执行到最后一条才COMMIT,这样会不会发生变化?
      

  7.   

    也不是执行一条commit一次,而是遇到“commit”语句就commit一次,在PL/SQL中也是一样的,这个应该没有不同
      

  8.   

    是不是在程序里面执行的时候超时了?你那条INSERT语句要执行多久?程序默认超时时间为60秒
      

  9.   


    delete没起作用?在程序中执行的时候.把commit去了试试
      

  10.   

    delete成功了
    而且,即便不成功也不应该几千条重复的纪录,应该也就重复一遍,几百条而已;
    “几千条重复纪录”是只有几条纪录,重复了上千次