I have difficulties trying to insert rows into an existing table object. Here is my code snippet:
string connectionString = \"Provider=Microsoft.ACE.OLEDB.12.0;D
If you are using the Microsoft.ACE.OLEDB
provider, then be aware that it doesn't support a named range. You need to provide the name of the sheet [Sheet1$]
or the name of the sheet followed by the range [Sheet1$A1:P7928]
.
If the range is not provided, it will then define the table as the used range, which may contains empty rows.
One way to deal with empty rows would be to delete them, but the driver doesn't support the DELETE
operation.
Another way is to first count the number of rows with a non empty Id
and then use the result to define the range of the table for the INSERT
statement:
using (OleDbConnection conn = new OleDbConnection(connectionString)) {
conn.Open();
string SheetName = "Sheet1";
string TableRange = "A1:P{0}";
// count the number of non empty rows
using (var cmd1 = new OleDbCommand(null, conn)) {
cmd1.CommandText = String.Format(
"SELECT COUNT(*) FROM [{0}$] WHERE ID IS NOT NULL;"
, SheetName);
TableRange = string.Format(TableRange, (int)cmd1.ExecuteScalar() + 1);
}
// insert a new record
using (var cmd2 = new OleDbCommand(null, conn)) {
cmd2.CommandText = String.Format(
"INSERT INTO [{0}${1}] (ID, Title, NTV_DB, Type) VALUES(7959, 8,'e','Type1');"
, SheetName, TableRange);
cmd2.ExecuteNonQuery();
}
}