Reputation: 1020
I am trying to insert multiple records in MS Access at once, but it says
Characters found after end of SQL statement.
How do I insert all records at once, here is my code.
Sample records which are in DataTable;
DataTable dt = new DataTable();
dt.Clear();
dt.Columns.Add("STORE_NAM1");
dt.Columns.Add("STORE_ADD1");
dt.Columns.Add("STORE_ADD2");
dt.Columns.Add("PHONE");
dt.Columns.Add("FAX");
dt.Columns.Add("ABN_ACN_NO");
dt.Columns.Add("EMAIL");
dt.Columns.Add("WEB");
object[] o = { "Qadeer", "Qadeer", "Qadeer", "Qadeer", "Qadeer", "Qadeer", "Qadeer", "Qadeer" };
dt.Rows.Add(o);
object[] o2 = { "Qadeer", "Qadeer", "Qadeer", "Qadeer", "Qadeer", "Qadeer", "Qadeer", "Qadeer" };
dt.Rows.Add(o2);
object[] o3 = { "Qadeer", "Qadeer", "Qadeer", "Qadeer", "Qadeer", "Qadeer", "Qadeer", "Qadeer" };
dt.Rows.Add(o3);
Here is insertion..
using (OleDbConnection con = new OleDbConnection(connectionAccess))
{
List<string> Rows = new List<string>();
string sCommand = "";
foreach (DataRow row in dt.Rows)
{
sCommand += "insert into store (STORE_NAM1, STORE_ADD1, STORE_ADD2, PHONE, FAX, ABN_ACN_NO, EMAIL, WEB) values ('"
+ row["STORE_NAM1"].ToString() + "', '"
+ row["STORE_ADD1"].ToString() + "', '"
+ row["STORE_ADD2"].ToString() + "', '"
+ row["PHONE"].ToString() + "', '"
+ row["FAX"].ToString() + "', '"
+ row["ABN_ACN_NO"].ToString() + "', '"
+ row["EMAIL"].ToString() + "', '"
+ row["WEB"].ToString() + "');";
//if I hard code values, this works fine with one insert
//sCommand = "insert into store(STORE_NAM1, STORE_ADD1, STORE_ADD2, PHONE, FAX, ABN_ACN_NO, EMAIL, WEB) values ('Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer');";
//this does not work with multiple records
//sCommand = "insert into store(STORE_NAM1, STORE_ADD1, STORE_ADD2, PHONE, FAX, ABN_ACN_NO, EMAIL, WEB) values ('Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer'); insert into store(STORE_NAM1, STORE_ADD1, STORE_ADD2, PHONE, FAX, ABN_ACN_NO, EMAIL, WEB) values ('Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer'); insert into store(STORE_NAM1, STORE_ADD1, STORE_ADD2, PHONE, FAX, ABN_ACN_NO, EMAIL, WEB) values ('Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer', 'Qadeer');";
try
{
using (OleDbCommand myCmd = new OleDbCommand(sCommand, con))
{
con.Open();
myCmd.CommandType = CommandType.Text;
int result = myCmd.ExecuteNonQuery();
Console.WriteLine(result +" records inserted");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
I have also tried it with parameterized way.
Upvotes: 2
Views: 1258
Reputation: 15091
Change
sCommand += "insert...
To
sCommand = "insert...
Your first time through the loop the Insert string is fine. After that, it just gets longer and longer. Access wants just one statement per query.
Upvotes: 1