如何在查询中使用带有OLEDB.Jet的Split字符串函数用于Excel文件

时间:2013-12-05 16:14:43

标签: asp.net excel split oledb jet

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

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

我的查询应该是这样的:

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];
}

该方法已经多次测试,因为它用于应用程序上的其他一些查询,但是使用此查询我收到此错误:

{"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$']'."}

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

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

1 个答案:

答案 0 :(得分:0)

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

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