我查询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查询时是没问题的啊~~~~!!
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查询时是没问题的啊~~~~!!
先用个变量把子串处理出来,再写sql不就好了嘛。
String temp=***.substring(....)
String 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 ";
{
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 , 我跟踪了一下,截取的不是字段内容,而是截取字段名了,比如我希望截取单位代码列里的内容,用你给的方法就是成截取“单位代码”这个字段名了
substring("+col_1+",7,2)Jet.OLEDB中没有substr函数只有substring
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) 而失败。
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