c# - * 的类型初始值设定项引发异常

标签 c# mysql

我的问题是我不断收到这样的错误:

The type initializer for 'myproject.GV' threw an exception."

GV是我的类(class)。代码看起来不错,运行时没有错误,但在我使用 MySqlConnection 调用 conn 后,问题就会出现。 我尝试调用 conn 的示例代码是这样的:GV.conn.Open();

在我将以下代码放入我的程序之前,它运行良好。现在它不断抛出错误:

public static class GV
{
    public static MySqlConnection conn = new MySqlConnection(
                "server=localhost;port=3306;uid=root;database=sysdb_elearn;password=***");
    public static MySqlCommand com = null;
    public static MySqlDataReader dr = GV.com.ExecuteReader();
    public static frmLearnerPanel flp = new frmLearnerPanel();
    public static frmLogIn frmLogin = new frmLogIn();
}

最佳答案

导致此行为的立即错误 - MySqlDataReader dr = GV.com.ExecuteReader(); 上的静态字段初始化中出现 NullReferenceException(当字段为 null 时,com 为 null已初始化)。当静态属性初始化期间出现任何异常时,整个类被标记为初始化失败,并且将来对其进行的任何访问都会引发您观察到的异常。更多信息可以在 MSDN 文章 TypeInitializationException 中找到.

修复:

  • 如果您确实需要静态字段中的这些数据 - 将代码包装在处理异常并且从不抛出的静态方法中。请注意,在静态变量中缓存读取器非常不实用,因为您只能从中读取数据一次。

    public static MySqlDataReader dr = StaticInitializerThatDoesNotThrow();
    
  • 更好的解决方案 - 重构代码以根据需要调用 SQL 并正确处置连接对象。 IE。请参阅正确的调用 - How to retrieve data from a SQL Server database in C#? .

关于c# - * 的类型初始值设定项引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38463179/

相关文章:

c# - 如何将 C# 资源文件字符串转换为方法而不仅仅是属性?

c# - 检查信号量的每个线程是否已完成

php - 日期时间编辑php到mysql错误

php - 如何从本地主机连接到我的数据库 sql 文件?

php - SQL 从历史记录中返回第一个记录日期

php - 如果 php 脚本突然不起作用怎么办

c# - 在 VS 2015 中将程序集添加到类库

c# - 解析字符串以使用逗号和点加倍

c# - 通过 Microsoft.DirectX.AudioVideoPlayback 显示对视频播放的控制

php - MySQL 表未在 UPDATE 查询上更新(来自 Facebook 图形调用)