2017-02-21 3 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

Пожалуйста, дайте больше информации, чем это ошибка? –

+0

Ошибка синтаксиса в инструкции INSERT INTO. –

ответ

0

Вместо

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

сделать это

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

Один из столбцов в DataTable может быть назван как специальное ключевое слово в поставщике Jet db, например, представляет столбец «Дата» или «Где» или что-то в этом роде.

Во втором взгляде я вижу, что у вас есть пробелы в именах столбцов, которые исходят из данных. Этот подход с квадратными скобками все еще может помочь.

Пожалуйста, обратите внимание, что имена параметров, как

@PO NO 

не должны содержать пробелов, поэтому я хотел бы удалить пробелы из имен параметров.

0

Вы spaces в вашем column names, так что используйте [] в column names и replace space with _ в parameter names

Измените строки кода, как показано ниже:

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