【问题标题】:Syntax error in INSERT INTO statement OleDBCOmmandINSERT INTO 语句 OleDBCOMmand 中的语法错误
【发布时间】:2014-05-21 14:54:12
【问题描述】:

我在尝试将数据表中的行插入 Excel 工作表时遇到问题。我不断收到语法错误,但是当我将 sql 字符串插入 mssql 服务器时,验证 sql 语句没有问题。

这是我的代码:

public void InsertData(DataTable kpiData)
{
    string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\KPIReports\";
    string fileName = @"\Return_Report - " + DateTime.Today.ToShortDateString() + ".xlsx";
    string[] files = Directory.GetFiles(folderPath);
    foreach (string file in files)
    {
        File.Delete(file);
    }

    File.Copy(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\ReportTemp.xlsx", folderPath + fileName);
    System.Data.OleDb.OleDbConnection connection;
    System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
    string sql = null;
    connection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + folderPath + fileName + ";Extended Properties=\"Excel 12.0;ReadOnly=False;HDR=YES;\"");
    connection.Open();
    myCommand.Connection = connection;

    foreach (DataRow row in kpiData.Rows)
    {
        string weight = row[11].ToString().Replace(',', '.');
        sql = "Insert into [Data$] (WeekNr, AccountNumber, Barcode, Barcode2, PickupDate, DeliveryCustID, DeliveryAlias, PickupCustID, PickupAlias, DeliveryAttentionName, Coli, Weight, Note, DeliveryType, " +
                    "Name, Street, HouseNo, Postal, City, DanxCode, Receiver, PODTime, OnTime, [Service]) Values('" + row[0].ToString() + "','" + row[1].ToString() + "','" + row[2].ToString() + "','" + row[3].ToString() + "','" + row[4].ToString() + "','"
                    + row[5].ToString() + "','" + row[6].ToString() + "','" + row[7].ToString() + "','" + row[8].ToString() + "','" + row[9].ToString() + "','" + row[10].ToString() + "','" + weight + "','" + row[12].ToString() + "','" + row[13].ToString() + "','"
                    + row[14].ToString() + "','" + row[15].ToString() + "','" + row[16].ToString() + "','" + row[17].ToString() + "','" + row[18].ToString() + "','" + row[19].ToString() + "','" + row[20].ToString() + "','" + row[21].ToString() + "','" + row[22].ToString() + "','" + row[23].ToString() + "')";

        myCommand.CommandText = sql;
        myCommand.ExecuteNonQuery();
    }
    myCommand.Dispose();
    connection.Close();
    releaseObject(myCommand);
    releaseObject(connection);
}

这是 sql 字符串:

Insert into [Data$] (WeekNr, AccountNumber, Barcode, Barcode2, PickupDate, DeliveryCustID, DeliveryAlias, PickupCustID, PickupAlias, DeliveryAttentionName, Coli, Weight, Note, DeliveryType, Name, Street, HouseNo, Postal, City, DanxCode, Receiver, PODTime, OnTime, [Service]) Values('20','44730629311','12626707007','0681739685','10-05-2014 15:22:13','xxxxx','xxxx','xxxxx','Asker','','1','0.2','','N','xxx','xxxx','111','0665','xxx','xxx','xxxx','13-05-2014 07:00:00','OT','Reverse')

我似乎找不到问题所在。我希望有人不能帮助我..

提前致谢。

【问题讨论】:

  • 您正在使用 Excel 连接字符串,这意味着您正在尝试在 Excel 电子表格上执行 T-SQL 语句。语法不同,因此适用于 SQL Server 或 MySQL 的语句可能不适用于 Excel。无论如何,使用 SSIS 导出 Excel 文件比在代码中执行此操作要容易得多
  • 最有可能生成错误,因为您将 all 值作为字符串传递...尝试仅插入一列,看看是否仍然出现错误..

标签: c# .net oledb oledbconnection oledbcommand


【解决方案1】:

我找到了问题。

问题是我没有括号中的注释列。因为 Note 是一个保留字,所以它必须像这样用括号括起来:[Note]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多