我的问题是我不断收到这样的错误:
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/