为了账号安全,请及时绑定邮箱和手机立即绑定

OLEDB 在尝试获取数据时出现错误

OLEDB 在尝试获取数据时出现错误

C#
慕桂英546537 2022-08-20 16:25:17
当我尝试使用OLEDB从Excel中选择所有数据时。我收到错误查询表达式“创建者”中的语法错误(缺少运算符)这是因为列名中有空格吗?查询为:选择代码,名称,创建者,日期从 [模板$]public DataTable GetExcelDataToTable(string filename, string dataExchangeSelectedColum){    //List<DataExchangeDefinition> dataExchange = new List<DataExchangeDefinition>();    string extension = Path.GetExtension(filename);    string connstring = string.Empty;    DataTable ExcelData = null;    try    {        switch (extension)        {            case ".xls":                connstring = string.Format(ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString, filename);                break;            case ".xlsx":                connstring = string.Format(ConfigurationManager.ConnectionStrings["Excel07+ConString"].ConnectionString, filename);                break;        }        using (OleDbConnection connExcel = new OleDbConnection(connstring))        {            using (OleDbCommand cmd = new OleDbCommand())            {                cmd.Connection = connExcel;                connExcel.Open();                var dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);                connExcel.Close();                var firstSheet = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();                cmd.CommandText = "SELECT " + dataExchangeSelectedColum + " FROM [" + firstSheet + "]";                ExcelData = new DataTable();                OleDbDataAdapter oda = new OleDbDataAdapter();                oda.SelectCommand = cmd;                oda.Fill(ExcelData);            }        }    }    catch (Exception ex)    {        throw ex;    }    return ExcelData;}这是我尝试的代码,这里包含它们是“代码,名称,创建者,日期”的列dataExchangeSelectedColum
查看完整描述

2 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

如果列名称包含空格,则需要在列名称两边添加方括号:


cmd.CommandText = $"SELECT [{dataExchangeSelectedColum}] FROM [{firstSheet}]";

评论后编辑:


如果要选择名称可能包含空格的多个列:


public DataTable GetExcelDataToTable(string filename, IEnumerable<string> columns)

{

    ...

    string formattedColumns = string.Join("," columns.Select(column => $"[{column}]"));


    cmd.CommandText = $"SELECT {formattedColumns} FROM [{firstSheet}]";

    ...

}

可以通过以下方式调用:


DataTable table = GetExcelDataToTable(fileName, 

    new string[] { "Code", "Name", "Created By", "Date" });


查看完整回答
反对 回复 2022-08-20
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

我就是这样做的


 List<string> selecttedColsList = dataExchangeSelectedColum.Split(',').ToList();

        string formattedColumns = "";

        //string comma = "";

        for (int i = 0; i < selecttedColsList.Count; i++)

        {

            //formattedColumns = string.Join(",", selecttedColsList.Select(col => $"[" + selecttedColsList[i] + "]"));

            formattedColumns+= ""+$"[" + selecttedColsList[i] + "]";

            if (i != selecttedColsList.Count - 1)

            {

                formattedColumns += ",";

            }


        }            


查看完整回答
反对 回复 2022-08-20
  • 2 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信