0

我需要帮助解决这个错误。

这是错误{"The type initializer for 'System.Transactions.Diagnostics.DiagnosticTrace' threw an exception."}


我正在使用 Access 数据库和平台进行构建配置是任何 CPU。

有时代码运行良好,有时突然抛出这个异常。这里有很多类似的问题,但没有一个能解决我的错误。

这是我的连接字符串

DbPath = @"d:\Ek.mdb";
ConnectionString =@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DbPath+";User Id=admin;Password=;";

这是我打开连接的功能
我收到错误Con.Open()

public bool OpenConnection()
        {
            if (Con == null)
            {
                Con = new OleDbConnection(ConnectionString);
            }
            else if ((Con.State == ConnectionState.Broken || Con.State == ConnectionState.Closed) && (Con.State!=ConnectionState.Open))
            {
                Con.Open();
                Tx = Con.BeginTransaction(IsolationLevel.ReadCommitted);
                return true;
            }
            else if (IsConnectionBusy())
            {
                throw new DataException("Connection Busy");
            }
            return false;
        }

这就是我在执行查询后关闭连接的方式

public Boolean CloseConnection()
        {
            if(IsConnectionBusy())
                throw new DataException("Connection Busy");
            if (Con.State==ConnectionState.Open)
            {
                Tx.Commit();
                Con.Close();
                return true;
            }
            return false;
        }
public bool IsConnectionBusy()
    {
        switch (Con.State)
        {
            case ConnectionState.Connecting:
            case ConnectionState.Executing:
            case ConnectionState.Fetching:
                return true;
        }
        return false;
    }

我找不到为什么它有时会完美运行,然后有时会抛出此异常。
任何帮助将不胜感激。我为解决此错误尝试了太多,但无法解决。

我注意到的是在这条线上。

 else if ((Con.State == ConnectionState.Broken || Con.State == ConnectionState.Closed) && (Con.State!=ConnectionState.Open))


连接在closed state. 当它执行Con.Open()语句时,Connection状态更改为Open,然后抛出此错误。
同样在调试时不会导致错误。只有当我不在breakpoint那个地方放一个时才会引起这种情况。
当我第一次放置断点并停在Con.Open()那里几秒钟时,没有抛出错误。之后,如果我禁用断点并且没有引发错误......!!!

4

7 回答 7

2

将数据库更改为 sqlite,一切都运行得非常顺利......
我认为在 Access db 中的事务存在一些问题。
它通过更改数据库得到解决。我仍然不确定是什么导致了那个奇怪的错误。

于 2013-07-07T09:50:52.877 回答
1

我的 App.Config 文件有问题。

我删除了它并从一个新项目中添加了一个新的,它为我修复了它。

于 2013-08-22T19:08:32.407 回答
1

我建议检查此异常的InnerException属性。

我遇到了同样的错误,即使我处于不寻常的情况下,我认为记录解决方案仍然很有用。

上下文:需要通过标准 .NET 连接器(MySql.Data)连接到 MySql 的简单控制台应用程序

上下文:connectionStringsin myapp.config通过其configSource属性指向外部文件。现在,在 .NET 中,只有当该文件位于同一目录中或层次结构中的较低级别(而不是较高级别)时,您才能指向外部配置文件。关键是,我的外部文件当然是在层次结构中更高的目录中,所以我选择了另一种方式来读取我感兴趣的连接字符串,并且在几天后恢复了该应用程序的工作,但我没有记住我app.config的坏了。

app.config这就是问题所在,即使您没有以编程方式访问它,连接器(或其他一些 ADO 机器)显然也会解析它,因此会出现此错误。我能够弄清楚是因为我查看了 InnerException,这就是我建议检查它的原因。

于 2014-08-04T12:04:20.583 回答
1

我开始在已经有configSections的配置节点下添加appSettings时出现此错误。InnerException 指出“每个配置文件只允许一个元素,如果存在必须是根元素的第一个子元素。” 所以我只是改变了我的配置节点序列。我的配置现在看起来像这样。configSections

<configSections>
 <sectionGroup >
  <section name />
 </sectionGroup>
</configSections>
<appSettings>
 <add key="xxx" value="true"/>
</appSettings>

appSettings已在configSections之后移动。尽管场景似乎与该线程的创建者面临的问题不同,但希望它对某人有所帮助..

于 2018-05-28T05:48:21.967 回答
0

能否请您使用以下两种方法打开和关闭 Access db 连接并尝试在 x86 模式下构建程序,看看是否出现问题:

OleDbConnection _oleCon;
        public Form1()
        {
            InitializeComponent();
            _oleCon = new OleDbConnection();
        }

        bool OpenConnection()
        {
            try
            {
                string DbPath = @"D:\Ek.mdb";
                _oleCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" + DbPath + ";";//ConfigurationSettings.AppSettings["dbConnectionString"];
                _oleCon.Open();
                return true;
            }
            catch
            {
                return false;
            }
        }

        bool CloseConnection()
        {
            try
            {
                _oleCon.Close();
                return true;
            }
            catch
            {
                return false;
            }
        }
于 2013-07-07T10:36:36.833 回答
0

从 app.config 中删除空白空间......它对我来说工作正常......

于 2013-10-03T08:09:59.750 回答
0

我更新了我的 NuGet 包,这似乎解决了我连接到本地 SQLite 数据库的问题。

于 2015-05-17T17:47:04.713 回答