2017-02-21 56 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))); 

其中一列中的數據表可能被命名爲喜歡有一個問題在Jet數據庫提供商中的特殊關鍵字例如想象一列'日期'或'Where'或類似的東西。

第二次看,我看到你的列名中有空格來自數據表。這個平方括號的方法仍然可以幫助。

請注意參數的名稱,如

@PO NO 

不應包含空格,所以我會從參數名稱中刪除空格。

0

您的column namesspaces,所以在parameter names

使用[]column namesreplace space with _修改您的代碼行象下面這樣:

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]); 
相關問題