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)
而不是
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数据库提供程序中的特殊关键字,例如想象一个列&#39;日期&#39;或者&#39;哪里&#39;或类似的东西。
第二次看,我看到你的列名中有空格来自数据表。这种方括号方法仍然有用。
请注意参数名称,如
@PO NO
不应包含空格,因此我会从参数名称中删除空格。
答案 1 :(得分: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]);