2014-05-20 5 views
0

데이터 시트의 행을 Excel 시트에 삽입하려고 할 때 문제가 있습니다. 계속 구문 오류가 발생하지만 mssql 서버에 sql 문자열을 삽입 할 때 SQL 문을 확인하는 데 문제가 없습니다.INSERT INTO 문에서 구문 오류가 발생했습니다. OleDBCOmmand

이 내 코드입니다 :

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') 

. 나는 누군가가 나를 도울 수 있기를 바랍니다.

미리 감사드립니다.

+0

Excel 연결 문자열을 사용하고 있습니다. 즉, Excel 스프레드 시트에서 T-SQL 문을 실행하려고합니다. 구문이 다르므로 SQL Server 또는 MySQL에서 작동하는 문이 Excel에서 작동하지 않을 수 있습니다. 어쨌든 Excel 파일을 내보내는 데 SSIS를 사용하는 것이 코드 –

+0

에서보다 훨씬 쉽습니다. ** 모든 ** 값을 문자열로 전달하기 때문에 오류가 발생할 가능성이 큽니다 ... 하나의 열만 삽입 해보십시오 여전히 오류가 있는지 확인하십시오 .. –

답변

0

문제점을 발견했습니다.

문제는 내가 대괄호 안에 Note 열을 가지고 있지 않다는 것이 었습니다. Note는 예약어이므로 다음과 같이 대괄호를 사용해야합니다. [참고]