我查询Excel文件时写的一句SQL:
string str = "select "+col_1+","+col_2+","+col_3+","+col_4+",substr("+col_1+",7,2) a from ["+ls_Sheet_name+"$A"+s1+":E"+s2+"] where "+col_1+" is not null order by a ";====
监测的时候这句SQL被认做:select 单位编码,单位名称,单位级别,单位简称,substr(单位编码,7,2) a from [新单位编码$A1:E1000] where 单位编码 is not null order by a===========报错:
语法错误 (操作符丢失) 在查询表达式 'substr(单位编码,7,2) a' 中。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 语法错误 (操作符丢失) 在查询表达式 'substr(单位编码,7,2) a' 中。
源错误: 
行 45:  DataSet myDataSet = new DataSet();
行 46:  myAdapter.Fill(myDataSet);
行 47:  myAdapter.Dispose();
行 48:  conn.Close();
======================在查询Excel文件时,不能用“substr(字段1,起始位置,截取字段长) a”这样的语句么?在SQL查询时是没问题的啊~~~~!!
 

解决方案 »

  1.   

    我这个是在System.Data.OleDb里面的,可能是它里面Substr的语法不能这样写吧~有高手指导一下么
      

  2.   

    substr 这个不是标准的sql语句你放在sql里干吗。
    先用个变量把子串处理出来,再写sql不就好了嘛。
    String temp=***.substring(....)
    String sql=........
      

  3.   

    呵呵,你的sql语句没写对呗
    写成下面的试试
    string str = "select "+col_1+","+col_2+","+col_3+","+col_4+","+col_1.Substring(7,2)+" a from ["+ls_Sheet_name+"$A"+s1+":E"+s2+"] where "+col_1+" is not null order by a ";
      

  4.   

    我等于是要做一个排序,针对某个字段的第7 8 位进行排序,所以我用substr(aaa,7,2) a,用a代替这个2位的字段,然后用 order by a 进行排序了解?
      

  5.   

    好象不对~~~ "+col_1.Substring(7,2)+" a  这样截出来的不是我想要的
      

  6.   

    order by 后面不要用a直接用substring(aaa,7,2)这个试试
      

  7.   

    这是我的取数函数private DataSet CreateDataSource(string ls_Sheet_name,string s1,string s2,string col_1,string col_2,string col_3,string col_4)
    {
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource='"+filePath+"';Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\"";
    OleDbConnection conn = new OleDbConnection(strConn);
    OleDbDataAdapter myAdapter = new OleDbDataAdapter("select "+col_1+","+col_2+","+col_3+","+col_4+",substr("+col_1+",7,2) a  from ["+ls_Sheet_name+"$A"+s1+":E"+s2+"] where "+col_1+" is not null order by a ", strConn);
    DataSet myDataSet = new DataSet();myAdapter.Fill(myDataSet);
    myAdapter.Dispose();
    conn.Close();
    conn.Dispose();
    return myDataSet;
    }
    =====
    想知道如何用类似sunstr的方法,获得一个别名songxiaozhao(雨朋) 如果象你那样"+col_1.Substring(7,2)+" a , 我跟踪了一下,截取的不是字段内容,而是截取字段名了,比如我希望截取单位代码列里的内容,用你给的方法就是成截取“单位代码”这个字段名了
      

  8.   

    应该使用:
    substring("+col_1+",7,2)Jet.OLEDB中没有substr函数只有substring
      

  9.   

    无语,还是不行==========按你所说写的SQL
    string str = "select "+col_1+","+col_2+","+col_3+","+col_4+",substring("+col_1+",7,2) a from ["+ls_Sheet_name+"$A"+s1+":E"+s2+"] where "+col_1+" is not null order by a ";=========报错:IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败。
      

  10.   

    1、string str = "select "+col_1+","+col_2+","+col_3+","+col_4+",substring("+col_1+",7,2) a from ["+ls_Sheet_name+"$A"+s1+":E"+s2+"] where "+col_1+" is not null order by a ";
    1语句如果可以编译成下面2语句,就是没错的,
    可能的错误是字段用了汉字,可以把2语句中的汉字字段都用中括号括起来
    写成3语句,再试试
    2、select 单位编码,单位名称,单位级别,单位简称,substring(单位编码,7,2) a from [新单位编码$A1:E1000] where 单位编码 is not null order by a3、select [单位编码],[单位名称],[单位级别],[单位简称],substring(单位编码,7,2) a from [新单位编码$A1:E1000] where [单位编码] is not null order by a
      

  11.   

    string str = "select "+col_1+","+col_2+","+col_3+","+col_4+",substring(col_1,7,2) a+" from ["+ls_Sheet_name+"$A"+s1+":E"+s2+"] where "+col_1+" is not null order by a ";