';的类型初始值设定项;System.Transactions.Diagnostics.DiagnosticTra
本文关键字:System Diagnostics DiagnosticTra Transactions 类型 | 更新日期: 2023-09-27 18:21:25
我需要帮助解决这个错误
这是错误{"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()
,当我第一次放置断点并在那里停留几秒钟时,就不会抛出错误。之后,如果我禁用断点并且没有抛出错误。。。!!!
我的App.Config文件有问题。
我删除了它,并从一个新项目中添加了一个新的,它为我修复了它。
我建议检查此异常的InnerException
属性。
我也有同样的错误,即使我处于不寻常的情况下,我认为记录解决方案仍然很有用。
上下文:需要通过标准.NET连接器(MySql.Data)连接到MySql的简单控制台应用程序
上下文:我的app.config
中的connectionStrings
通过其configSource
属性指向外部文件。现在,在.NET中,只有当外部配置文件位于同一目录或层次结构中较低的目录中,而不是较高的目录中时,才可以指向该文件。关键是,我的外部文件当然在层次结构中更高的目录中,所以我选择了另一种方式来读取我感兴趣的连接字符串,几天后又恢复了对该应用程序的工作,我不记得我的app.config
坏了。
这就是问题所在,显然连接器(或其他一些ADO机制)解析app.config
,即使您没有以编程方式访问它,也会发生此错误。我之所以能弄清楚,是因为我查看了InnerException,这就是我建议检查它的原因。
我在configuration节点下添加appSettings时开始出现此错误,该节点已经有configSections。。InnerException指出"每个配置文件只允许有一个configSections
元素,如果存在,必须是根元素的第一个子元素。"所以我只是更改了配置节点序列。我的配置现在是这样的。
<configSections>
<sectionGroup >
<section name />
</sectionGroup>
</configSections>
<appSettings>
<add key="xxx" value="true"/>
</appSettings>
appSettings已在configSections之后移动。尽管场景似乎与该线程的创建者所面临的问题不同,但希望它能帮助到某人。。
将数据库更改为sqlite,一切都非常顺利
我认为Access数据库中的事务存在一些问题
通过更改数据库解决了此问题。但我仍然不确定是什么原因导致了那个奇怪的错误。
您能否使用以下两种方法打开和关闭Access数据库连接,并尝试在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;
}
}
从app.config中删除空白……这对我来说很好…
我更新了NuGet包,这似乎解决了我连接到本地SQLite数据库的问题。