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)
1
A
ответ
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]);
Пожалуйста, дайте больше информации, чем это ошибка? –
Ошибка синтаксиса в инструкции INSERT INTO. –