如何在查询中使用OLEDB.Jet for Excel文件使用分割string函数

我正在ASP.NET Web Forms 4.5中开发一个Web应用程序,它导入Access数据库中的Excel(.XLS,.XLSX)文件数据。

我需要实现一个查询将Excel工作表列分成两个不同的字段。

我的查询应该是这样的:

string query = @"SELECT DISTINCT split(([MyExcelColumn], "" - "")(0) AS [CustomerID], split(([MyExcelColumn], "" - "")(1) AS [CustomerDescr] FROM [Sheet]"; // The separator string is " - ". // Executing the query DataTable dt = ExcelWorksheet.ListQuery(ExcelFileConnString, query); 

ExcelWorksheet.ListQuery是一个在Excel文件上执行列表查询的方法。 这是方法的实现:

 public static DataTable ListQuery(string connString, string query) { OleDbConnection conn = null; DataSet ds = null; try { conn = new OleDbConnection(connString); conn.Open(); OleDbCommand cmd = new OleDbCommand(query, conn); OleDbDataAdapter da = new OleDbDataAdapter(cmd); ds = new DataSet(); da.Fill(ds); } catch (Exception ex) { throw ex; } finally { if (conn != null) { conn.Close(); conn.Dispose(); } } return ds.Tables[0]; } 

该方法已被多次testing,因为它用于应用程序的其他查询,但与此查询我得到这个错误:

 {"Synthax error (missing operator) in the expression of the query 'split(([MyExcelColumn], \" - \")(0) AS [CustomerID], \r\n split(([MyExcelColumn], \" - \")(1) AS [CustomerDescr]\r\n FROM ['Sheet$']'."} 

我试图用括号做一些修改,但没有任何发生。

我认为这与split函数结果数组的(index)有关…但是我做错了什么?

正如你所发现的,你不能在Access SQL查询中使用VBA Split()函数,因为你只是将[MyExcelColumn]分成两部分,你可以使用它:

 SELECT Mid([MyExcelColumn],1,InStr([MyExcelColumn]," - ")-1) AS [CustomerID], Mid([MyExcelColumn],InStr([MyExcelColumn]," - ")+3) AS [CustomerDescr] FROM [Sheet]