c# - OleDbDataAdapter 不在访问表中插入数据表

标签 c# oledbdataadapter

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

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 = DT.NewRow(); 博士[0] = “1”; dr[1] = "AAAA"; 博士[2] = "3"; 博士[3] = "4"; 博士[4] = “5”; 博士[5] = "6"; 博士[6] = “7”; 博士[7] = “8”; 博士[8] = "9"; DT.Rows.Add(dr); 然后它插入一条记录但留下另一条记录。

最佳答案

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

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

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

关于c# - OleDbDataAdapter 不在访问表中插入数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35127508/

相关文章:

c# - 无法在方法内将对象设置为 null

c# - 将 UTF8 字符串保存到 SQL Server

c# - 基于条件值构建 linq 查询

c# - .NET 4.5 HttpClient 请求 ServicePoint

c# - Excel 文件 - 它已经被另一个用户以独占方式打开,

sql - 如何通过 OleDb 在 MS Access 上使用公用表表达式执行复杂的 SQL 查询

c# - 声明大数组时出现 OutOfMemoryException

sql - 另一个没有为一个或多个必需参数问题给出值

c# - SELECT 语句中的 OleDbCommand 语法错误 0x80040E14

c# - 使用 OleDb 写入 Excel