C# OleDbDataAdapter不在access表中插入Datatable

C# OleDbDataAdapter不在access表中插入Datatable,c#,oledbdataadapter,C#,Oledbdataadapter,我在sql server表中有记录。我正在从sql server填充DataTable中的所有记录,然后我想在access表中插入所有记录。但没有数据插入,插入时间也没有错误。请提供您需要的帮助 public bool SalesGenExistingCustomer_Insert_InAccessDB(DataTable DT) { bool flag = true; int ii = DT.Rows.Count; try

我在sql server表中有记录。我正在从sql server填充DataTable中的所有记录,然后我想在access表中插入所有记录。但没有数据插入,插入时间也没有错误。请提供您需要的帮助

public bool SalesGenExistingCustomer_Insert_InAccessDB(DataTable DT)
    {

       bool flag = true;
       int ii = DT.Rows.Count;
        try
        {
            string SQL = "SELECT top 1 * FROM GenExistingcustomers";
            string INSERT = "INSERT INTO GenExistingcustomers([CustomerId],[CompanyName],[BillingAddress],[City],[State],[Zip],[Phone],[Email])" +
                            " VALUES (@CustomerId,@CompanyName,@BillingAddress,@City,@State,@Zip,@Phone,@Email)";

            OleDbConnection OleConn = new OleDbConnection(ConnString);
            OleDbDataAdapter OleAdp = new OleDbDataAdapter(SQL, OleConn);
            OleAdp.InsertCommand = new OleDbCommand(INSERT);
            OleAdp.InsertCommand.Parameters.Add("@CustomerId", OleDbType.LongVarChar, 1008, "CustomerId");
            OleAdp.InsertCommand.Parameters.Add("@CompanyName", OleDbType.LongVarChar, 1008, "CompanyName");
            OleAdp.InsertCommand.Parameters.Add("@BillingAddress", OleDbType.LongVarChar, 1008, "BillingAddress");
            OleAdp.InsertCommand.Parameters.Add("@City", OleDbType.LongVarChar, 1008, "City");
            OleAdp.InsertCommand.Parameters.Add("@State", OleDbType.LongVarChar, 1008, "States");
            OleAdp.InsertCommand.Parameters.Add("@Zip", OleDbType.LongVarChar, 4000, "Zip");
            OleAdp.InsertCommand.Parameters.Add("@Phone", OleDbType.LongVarChar, 1008, "Phone");
            OleAdp.InsertCommand.Parameters.Add("@Email", OleDbType.LongVarChar, 1008, "Email");

            OleAdp.InsertCommand.Connection = OleConn;
            OleAdp.InsertCommand.Connection.Open();
            int i = OleAdp.Update(DT);
            OleAdp.InsertCommand.Connection.Close();

        }
        catch (Exception ex)
        {
            LogFile(ex.ToString());
            flag = false;
        }
        string ssss = DT.Rows[1][4].ToString();
        return flag;

    }
如果添加一行,如-
DataRow-dr;
dr=DT.NewRow();
dr[0]=“1”;
dr[1]=“AAAA”;
dr[2]=“3”;
dr[3]=“4”;
dr[4]=“5”;
dr[5]=“6”;
dr[6]=“7”;
dr[7]=“8”;
dr[8]=“9”;
DT.Rows.Add(dr)

然后插入一条记录,但留下另一条记录。

数据表中的行必须具有正确的状态,才能由数据适配器插入到数据库中(请参见属性)。报告说:

适配器的更新方法将更新单个数据表,并根据表中每个数据行的行状态执行正确的命令(INSERT、Update或DELETE)


在您的情况下,行应处于
Added
状态。看起来他们不是。可能是因为调用了方法。您可以通过调用方法强制执行添加的状态。

您好,您能更正我的代码吗?我认为这个错误是由我正在从sql server表加载的现有数据引起的。谢谢回复。我认为从sql server表加载的现有数据发生了错误。我的代码经过测试。我想在access数据库中插入批量记录。我检查DataTable和access表的数据类型是否正确。你能用相同或不同结构的sql server数据来检查我的代码并提供正确的方法吗。odata服务使用相同的方法。我使用odata服务填充列表中的记录,然后从linq填充DataTable中的所有数据,然后成功插入。请帮助。您是否尝试使用我的答案中建议的DataRow.SetAdded方法?我没有在DataTable上插入记录。我在sql server表中有1000条记录,我正在DataTable中填充这些记录的数据。我不需要逐行插入数据。这是一个查找错误的测试过程。请建议。这是一种批量插入方法,经过100%测试。好的,你可以试试。将多条记录添加到DataTable中,并在access中创建具有相同结构的表,然后尝试插入。问题是sql server表未插入且未发生任何错误