C# 在c中一次在MS Access中插入多行#

C# 在c中一次在MS Access中插入多行#,c#,ms-access,C#,Ms Access,我试图一次在MS Access中插入多个记录,但它显示 在SQL语句结束后找到的字符 如何一次插入所有记录,这是我的代码 数据表中的样本记录 DataTable dt = new DataTable(); dt.Clear(); dt.Columns.Add("STORE_NAM1"); dt.Columns.Add("STORE_ADD1"); dt.Columns.Add("STORE_ADD2"

我试图一次在MS Access中插入多个记录,但它显示

在SQL语句结束后找到的字符

如何一次插入所有记录,这是我的代码

数据表中的样本记录

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);
这里是插入

    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);

        }

    }
使用(OleDbConnection con=新的OleDbConnection(connectionAccess))
{
列表行=新列表();
字符串sCommand=“”;
foreach(数据行中的数据行)
{
sCommand+=“将值插入存储(存储地址1、存储地址1、存储地址2、电话、传真、ABN ACN NO、电子邮件、WEB)中(”
+行[“STORE_NAM1]”。ToString()+“,”
+行[“存储添加1]”。ToString()+“,”
+行[“存储添加2”]。ToString()+“,”
+第[“PHONE”]行。ToString()+“,”
+行[“传真”]。ToString()+“,”
+行[“ABN_ACN_NO”]。ToString()+“,”
+行[“电子邮件”]。ToString()+“,”
+行[“WEB”].ToString()+”);
//如果我硬编码值,只需插入一个就可以了
//sCommand=“将值(‘Qadeer’、‘Qadeer’、‘Qadeer’、‘Qadeer’、‘Qadeer’、‘Qadeer’、‘Qadeer’、‘Qadeer’、‘Qadeer’、‘Qadeer’、‘Qadeer’)插入存储(存储名称1、存储地址1、存储地址2、电话、传真、ABN\ACN号、电子邮件、网络);”;
//这不适用于多个记录
//sCommand=“插入门店(门店名称1、门店地址1、门店地址2、电话、传真、ABN ACN NO、电子邮件、网络)值('Qadeer'、'Qadeer'、'Qadeer'、'Qadeer'、'Qadeer'、'Qadeer'、'Qadeer');插入门店(门店名称1、门店地址1、门店地址2、电话、传真、ABN ACN NO、电子邮件、网络)值('Qadeer','Qadeer','Qadeer','Qadeer','Qadeer','Qadeer','Qadeer','Qadeer','Qadeer','Qadeer','Qadeer','Qadeer','Qadeer','Qadeer','Qadeer','Qadeer','Qadeer','Qadeer','Qader',';
尝试
{
使用(OleDbCommand myCmd=新的OleDbCommand(sCommand,con))
{
con.Open();
myCmd.CommandType=CommandType.Text;
int result=myCmd.ExecuteNonQuery();
Console.WriteLine(结果+“插入记录”);
}
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
}
我也尝试过参数化的方法。

改变

sCommand += "insert...


第一次通过循环时,插入字符串很好。之后,插入字符串越来越长。Access希望每个查询只有一条语句。

执行这样的多条语句可能会导致注入,但尽管如此,我实际上看不到您的代码有任何问题。您是否尝试过打印原始Acessque我想看看它是什么样子?相关:@TimBiegeleisen我也尝试过硬编码值,它会给出相同的错误。因此,如果你完全硬编码两个插入,它会失败吗?硬编码一个插入会失败吗?那也会失败吗?是的,如果使用两个插入,它会失败,并且可以使用1。这意味着ms access中不允许同时使用多个插入?否我已经使用过,但您的execute命令在for循环中,因此它在每次迭代中都会使用您提供的代码执行。您可以在Access SQL(不同于Transact-SQL)@Mangrio re中检查大容量插入:“Access只需要每个查询一条语句。”-这是正确的。Access数据库引擎不支持单个查询中的多个DML语句(INSERT、UPDATE…)。
sCommand = "insert...