oracle里有个信息表,表里有一个未签收字段和已签收字段,当未签收字段为null时,页面查询就有可能报无效表达式的错误,但往未签收字段里添个数据,然后在删除,页面就正常了,这是怎么回事???

解决方案 »

  1.   

               //查询是否存在未签收数据
                string sql = "select ac1 from msg_jg where JGBH='" + Session["userdwid"].ToString() + "'";            DataTable dtt=(new lgyzagl_bll.MESSAGES()).DoSql(sql);
                if (dtt.Rows.Count != 0)
                {
                    string ggs = dtt.Rows[0][0].ToString();                string s = "";
                    if (ggs.Length > 0)
                    {                    string[] gs = ggs.Substring(0, ggs.Length - 1).Split(',');                    for (int i = 0; i < gs.Length; i++)
                        {
                            s += "'" + gs[i] + "',";
                        }                    s = s.Substring(0, s.Length - 1);
                    }
                    sql = "select * from MESSAGES where Id in(" + s + ") order by id desc";
                    DataTable dt1 = (new lgyzagl_bll.MESSAGES()).DoSql(sql);就是怎么写的,当ac1为null时,就有可能报错
      

  2.   


    拼的s串有问题.
    在sql = "select * from MESSAGES where Id in(" + s + ") order by id desc";
    后加个断点,看看null的时候是不是出现in('1',,'2')类似这样的情况
      

  3.   

    并没有看到处理ac1为null的情况啊
    ac1为null,并不表示dtt.Rows.Count为0,应该为1
    ac1为null,并没有看到你的特殊处理
      

  4.   

    你对查询结果的处理不全面吧
    rows.length大于0,不代表值不为null,如果等于null,你要处理一下
      

  5.   

    null ,not null时
    加逻辑判断,再拼cou语句
      

  6.   

    那当table为null时怎么有的时候正确,有的时候就报无效的表达式的错误呢??
      

  7.   

    用sql处理下null,或在程序中处理sql结果后的数据
      

  8.   

    NULL的意思是[不知道],或者说不确定,无法判断
    并不是[空]的意思,
    就是没有唯一的肯定结果所以不做特殊处理或者判断,出现不稳定或者不同时间同样处理出现不同结果
    是有可能的
      

  9.   

    跟报错没关系了.
    既然有null的时候sql报错,必然会在sql组装完毕但未执行的地方加断点来查看拼装的sql有没有问题.