I'm developing a web application in ASP.NET Web Forms 4.5 which imports Excel (.XLS, .XLSX) files data inside an Access Database.
I need to implement a query that separate an Excel worksheet column into 2 different fields.
My query should be something like this:
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 is a method that executes a list query on the Excel file.
This is the method implementation:
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];
}
The method has been already tested multiple times since it is used for some other queries on the application, but with this query I'm getting this error:
{"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$']'."}
I tried to make some changes with the parenthesis but nothing happened.
I think it has to do with the (index) of the split function result array... but what am I doing wrong?
                        
As you have discovered, you cannot use the VBA
Split()function in an Access SQL query, Since you are only splitting [MyExcelColumn] into two parts you can use this instead: