外部组件抛出异常

External component throws an exception

我有一个问题。我有 Access 数据库和 WPF 应用程序。该应用程序是 Build in 32-bit,而 Access Database 是 32-bit。每隔一段时间,应用程序在连接到数据库时会向我显示错误。外部组件会抛出异常。而且即使我吃掉错误或尝试再次连接到数据库,它也不起作用。我必须重新启动应用程序,然后它再次运行,直到它在接下来的 15 个左右的数据库连接事务中再次抛出错误。如果你明白我的意思。

如何重新启动该错误,以便我可以再次连接到数据库或避免引发错误。

请帮帮我。 我不知道提供什么样的代码是相关的。

        try
        {
            List<IDModel> output = new List<IDModel>();
            using (OleDbConnection connection = new OleDbConnection(Conn))
            {
                await connection.OpenAsync();
                using (OleDbCommand Command = new OleDbCommand("SELECT * FROM DATA WHERE [STATUS] = @status;", connection))
                {

                    Command.Parameters.AddWithValue("@status", _status);

                    var reader = await Command.ExecuteReaderAsync();

                    while (reader.Read())
                    {

                        output.Add(InsertID
                                            ((int)reader["ID"], (string)reader["STANDARD"], (string)reader["NAZIV"], (string)reader["POSLOVNA ENOTA"],
                                            (string)reader["IZVOR NESKLADNOSTI"], (string)reader["ODDELEK"], (string)reader["OPIS"],

                                            (string)reader["SLIKA 1"].ToString(),
                                            (string)reader["SLIKA 2"].ToString(), (string)reader["SLIKA 3"].ToString(), (string)reader["SLIKA 4"].ToString(),
                                            (string)reader["SLIKA 5"].ToString(), (string)reader["EXCEL 1"].ToString(), (string)reader["PDF 1"].ToString(),

                                            (string)reader["SLIKA 6"].ToString(), (string)reader["EXCEL 2"].ToString(), (string)reader["PDF 2"].ToString(),
                                            (string)reader["KOREKCIJA"].ToString(),

                                            (string)reader["SLIKA 7"].ToString(), (string)reader["EXCEL 3"].ToString(), (string)reader["PDF 3"].ToString(),
                                            (string)reader["KOREKTIVNI"].ToString(), (string)reader["VZROK"].ToString(),

                                            (string)reader["OCENA"].ToString(), (string)reader["OPOMBA"].ToString(),

                                            (string)reader["NESKLADNOST ODPRL"].ToString(), (string)reader["KOREKCIJA PODAL"].ToString(), (string)reader["NESKLADNOST ZAPRL"].ToString(),
                                            (string)reader["NESKLADNOST VALIDIRAL"].ToString(), (string)reader["ROK ZA REŠITEV"].ToString(),

                                            (bool)reader["BIG EVENT"],

                                            (string)reader["NESKLADNOST ODPRTA"].ToString(), (string)reader["KOREKCIJA PODANA"].ToString(),
                                            (string)reader["NESKLADNOST ZAPRTA"].ToString(), (string)reader["NESKLADNOST VALIDIRANA"].ToString()
                                            ));
                    }
                }

                return output;
            }
        }
        catch (Exception)
        {
            throw;
            
        }

此致!

我认为问题出在访问数据库上。根据我的经验,Access 有时会在没有明显原因的情况下失败。我花了很多时间调查访问崩溃,但没有找到解决方案。有些事情可能会有所帮助:

  1. 确保您只从单个线程使用数据库。
  2. 确保正确处理所有与数据库相关的对象。
  3. 确保数据库不要太大,数据库大小有 2Gb 的限制。 运行 压缩可能会有帮助。
  4. 添加更好的错误处理、捕获错误并重试操作。如果多次失败,请处理并重新创建数据库连接。
  5. 将数据库访问转移到另一个进程。这有助于错误处理,允许您在需要时重新启动整个过程。

我的首选解决方案是完全避免使用访问权限。花时间将数据移植到一些真实的数据库。