【问题标题】:External component throws an exception外部组件抛出异常
【发布时间】:2021-01-15 22:22:28
【问题描述】:

我有一个问题。我有 Access 数据库和 WPF 应用程序。该应用程序是 32 位构建的,而 Access 数据库是 32 位的。每隔一段时间,应用程序在连接到数据库时都会向我显示一个错误。外部组件会引发异常。而且,如果我吃错了或尝试再次连接到数据库,它就不起作用了。我必须重新启动应用程序,然后它再次工作,直到它在接下来的 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 升级到更强大的 rdbms,例如 SQL Express 或 MySQL?
  • 当您启动应用程序时。它可能会压缩和修复数据库吗?
  • 不,它没有。
  • 我确实考虑过,但部门不同,因此转换为 SQL 需要很长时间。这就是为什么我正在寻找快速修复:)

标签: c# wpf ms-access caliburn.micro


【解决方案1】:

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

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

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

【讨论】:

  • 你的意思是如何处理和重新创建数据库。没看懂那条线?我的意思是是的,转移到 sql 会好得多,而且可能我需要这样做。但是该应用程序正在生产中,并且以前没有发现该错误。所以你的意思是每个Access数据调用不应该是并行的,它们应该总是一个接一个?
  • @zigimun 假设您使用的是 ado.net,您应该有一个 sql 连接,您应该能够处理和重新创建。
  • @zigimun,是的,根据我的经验,如果不必管理并发请求,访问会更好。您的体验可能会有所不同。
  • 我更新了我的问题。那么我应该在哪里处理连接呢?
  • Mybe 我真的应该切换到 SQL
猜你喜欢
  • 1970-01-01
  • 2017-06-24
  • 2012-09-17
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多