批量插入在MS访问数据库中不起作用后选择

时间:2017-11-30 02:57:35

标签: c# winforms ms-access insert oledb

有一个Windows窗体应用程序。我正在使用 MS Access 数据库进行一些数据操作。我想将数据从一个数据库复制到另一个数据库。两个表中的表名,模式和数据类型都相同。

我使用以下查询通过从源数据库中选择数据来批量插入目标数据库中的数据。

INSERT INTO [Table1] IN 'C:\Data\Users.mdf' SELECT * FROM [Table1]

插入数据后,我正在查询目标表以获取插入的数据。我正在使用OleDbConnection来执行数据库操作。

我在这里遇到的问题是,在我执行SELECT语句来获取数据时执行上述INSERT查询后,我没有得到数据。但是,当我在检查调试模式时,我正在获取数据。

我注意到,如果我在执行INSERT语句后等待一段时间,那么数据就会正确显示。所以我假设它需要一些时间(延迟?)来完成批量插入操作。

我在INSERT查询执行后尝试提供Task.Delay(20000)但没有运气。有人可以帮助我,我怎么能解决这个问题?任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:0)

我没有找到一个好方法来解决这个问题,但是也做了相同的工作。将数据插入表后,我将触发另一个查询以检查插入表中是否有任何数据。这发生在do..while循环中,如下所示。每次操作完成时都会删除该表。

        var insertQuery = "INSERT INTO [Table1] IN 'C:\Data\Users.mdf' SELECT * FROM [Table1]";
        ExecuteQuery(insertQuery, connProd);

        var count = 10;

        do
        {
            var selectQuery = "SELECT TOP 1 * FROM " + tableProdCopy;
            var dtTopRowData = GetQueryData(selectQuery, connOther);

            if (dtTopRowData != null && dtTopRowData.Rows.Count > 0)
            {
                count = 0;
                break;
            }

            System.Threading.Thread.Sleep(2000);

            count = count - 1;
        } while (count > 0);


        private DataTable GetQueryData(string query, OleDbConnection conn)
        {
            using (OleDbCommand cmdOutput = new OleDbCommand(query, conn))
            {
                using (OleDbDataAdapter adapterOutput = new OleDbDataAdapter(cmdOutput))
                {
                    var dtOutput = new DataTable();

                    adapterOutput.Fill(dtOutput);

                    return dtOutput;
                }
            }
        }



        private void ExecuteQuery(string query, OleDbConnection conn)
        {
            using (OleDbCommand cmdInput = new OleDbCommand(query, conn))
            {
                cmdInput.ExecuteNonQuery();
            }
        }