OleDbDataAdapter 不会在访问表中插入数据表

本文关键字:插入 数据表 访问表 OleDbDataAdapter | 更新日期: 2023-09-27 18:32:39

我在sql服务器表中有记录。我正在从sql服务器填充数据表中的所有记录,然后我想在访问表中插入所有记录。但是没有数据插入,插入时间也没有发生错误。请提供需要帮助

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);然后它插入一条记录但留下另一条记录。

OleDbDataAdapter 不会在访问表中插入数据表

数据表中的行必须具有正确的状态,数据适配器才能将其插入到数据库中(请参阅 RowState 属性(。文档说:

">适配器的 Update 方法将更新单个数据表,并根据表中每个数据行的 RowState 执行正确的命令(插入、更新或删除(。

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