2017-02-21 1 views
1
DataSet excelDataSet = new DataSet(); 
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='"+fullpath+"';Extended Properties=\"Excel 8.0;HDR=YES\";"; 

/*using (OleDbConnection conn = new OleDbConnection(connectionString)) 
{ 
    conn.Open(); 
    OleDbDataAdapter objDA = new OleDbDataAdapter("select * from [Sheet1$]", conn);     

    objDA.Fill(excelDataSet); 
    conn.Close(); 
}*/ 
string columns = string.Join(",", StdTable.Columns.Cast<DataColumn>().Select(c => c.ColumnName)); 
columns = columns.Replace(",F1", ""); 
string values = string.Join(",", StdTable.Columns.Cast<DataColumn>().Select(c => string.Format("@{0}", c.ColumnName))); 
values = values.Replace(",@F1", ""); 
string sqlCommandInsert = string.Format("INSERT INTO [Sheet1$] ({0}) VALUES ({1})", columns, values); 
using (OleDbConnection conn1 = new OleDbConnection(connectionString)) 
using (var cmd1 = new OleDbCommand(sqlCommandInsert, conn1)) 
{ 
    conn1.Open(); 
    foreach (DataRow row in StdTable.Rows) 
    { 
     cmd1.Parameters.Clear(); 
     foreach (DataColumn col in StdTable.Columns) 
     { 

      cmd1.Parameters.AddWithValue("@" + col.ColumnName, row[col]); 
      //cmd1.CommandText = sqlCommandInsert; 
     } 
     cmd1.ExecuteNonQuery(); 
    } 
    //cmd1.ExecuteNonQuery(); 
} 

//And Insert query values 
INSERT INTO [Sheet1$] (Sno,Customer,Vendor code,Circle,PO NO) VALUES (@Sno,@Customer,@Vendor code,@Circle,@PO NO) 
+0

Bitte weitere Informationen geben, was ist der Fehler? –

+0

Syntaxfehler in INSERT INTO-Anweisung. –

Antwort

0

Statt

string columns = string.Join(",", StdTable.Columns.Cast<DataColumn>().Select(c => c.ColumnName)); 

tun, um diese

string columns = string.Join(",", StdTable.Columns.Cast<DataColumn>().Select(c => string.Foramt("[{0}]", c.ColumnName))); 

Eine der Spalten einzufügen versuchen, in der Datentabelle könnte so benannt werden ein spezielles Schlüsselwort in Jet db Provider zum Beispiel eine Spalte 'Date' oder 'Where' oder etwas ähnliches vorstellen.

Auf den zweiten Blick sehe ich, dass Sie Leerzeichen in Ihren Spaltennamen haben, die aus der Datentabelle kommen. Dieser Square-Bracket-Ansatz könnte noch helfen.

Bitte beachten Sie, dass die Parameternamen wie

@PO NO 

keine Leerzeichen enthalten sollte, so würde ich die Räume von den Parameternamen entfernen.

0

Sie haben spaces in Ihrem column names, so verwenden [] in column names und replace space with _ in parameter names

Ändern Sie bitte Ihre Codezeilen wie unten:

string columns = string.Join(",", StdTable.Columns.Cast<DataColumn>().Select(c => string.Foramt("[{0}]", c.ColumnName))); 
columns = columns.Replace(",F1", ""); 
string values = string.Join(",", StdTable.Columns.Cast<DataColumn>().Select(c => string.Format("@{0}", c.ColumnName.Replace(" ", "_")))); 
values = values.Replace(",@F1", ""); 


cmd1.Parameters.AddWithValue("@" + col.ColumnName.Replace(" ", "_"), row[col]); 
Verwandte Themen