合并具有相同结构和主键的多个访问文件

时间:2020-03-24 10:40:16

标签: c# sql ms-access oledb

我环顾四周,发现对其他数据库类型对此有很多响应,但没有访问权限。

我现在正在将多个访问文件合并为一个文件。一切正常,直到我在CREATE TABLE上意识到忘记了定义主键并在合并中创建了一堆重复的记录的情况下。这些文件中的主键是GUID。那么我现在将如何处理重复项?

这是当前创建的内容:

CREATE TABLE [PRODUCE] ([PRODUCE_ID] VARCHAR(255) NOT NULL PRIMARY KEY, [PRODUCE_TYPE] VARCHAR(255) NOT NULL, [PRODUCE_LINK] DOUBLE NOT NULL)

这是当前的SELECT和INSERT:

SELECT PRODUCE_ID, PRODUCE_TYPE, PRODUCE_LINK FROM PRODUCE

INSERT INTO [PRODUCE] ([PRODUCE_ID], [PRODUCE_TYPE], [PRODUCE_LINK]) VALUES(@PRODUCE_ID, @PRODUCE_TYPE, @PRODUCE_LINK)

我目前在执行此操作时遇到的错误是: “您请求对表进行的更改未成功,因为它们将在索引,主键或关系中创建重复的值。更改包含重复数据的一个或多个字段中的数据,删除索引或重新定义索引以允许重复输入,然后重试。”

编辑:添加了完成此操作的整个代码部分。

                    OleDbConnection produceSource = new OleDbConnection(produceSourceString);
                    OleDbConnection produceDestination = new OleDbConnection(produceFinalString);

                    produceDestination.Open();

                    OleDbCommand cmdBSSource = produceSource.CreateCommand();
                    cmdBSSource.Connection = produceSource;
                    cmdBSSource.CommandText = "SELECT PRODUCE_ID, PRODUCE_TYPE, PRODUCE_LINK FROM PRODUCE";

                    OleDbCommand cmdBSDestination = produceDestination.CreateCommand();
                    cmdBSDestination.Connection = produceDestination;
                    cmdBSDestination.CommandText = @"INSERT INTO [PRODUCE] ([PRODUCE_ID], [PRODUCE_TYPE], [PRODUCE_LINK]) " +
                                                   @"VALUES(@PRODUCE_ID, @PRODUCE_TYPE, @PRODUCE_LINK)";

                    OleDbParameter param1 = new OleDbParameter("@PRODUCE_ID", OleDbType.VarChar);
                    cmdBSDestination.Parameters.Add(param1);
                    OleDbParameter param2 = new OleDbParameter("@PRODUCE_TYPE", OleDbType.VarChar);
                    cmdBSDestination.Parameters.Add(param2);
                    OleDbParameter param3 = new OleDbParameter("@PRODUCE_LINK", OleDbType.Double);
                    cmdBSDestination.Parameters.Add(param3);

                    produceSource.Open();

                    OleDbDataReader readerBS = cmdBSSource.ExecuteReader();

                    while (readerBS.Read())
                    {
                        param1.Value = readerBS[0].ToString();
                        param2.Value = readerBS[1].ToString();
                        param3.Value = readerBS[2].ToString();

                        cmdBSDestination.ExecuteNonQuery();
                    }
                    produceDestination.Close();
                    produceSource.Close();

0 个答案:

没有答案