向数据库添加数据时应用崩溃,触发System.NullReferenceException异常
解决System.NullReferenceException异常的方案
核心问题定位
你的MySQLDatabase类里,MyDatabase()是普通方法而非构造函数——构造函数不能带返回值类型(void),所以创建MySQLDatabase实例时,这个方法不会自动执行,导致conn字段始终为null,调用InsertData或CloseConnection时必然触发空引用异常。
修复步骤
1. 修正构造函数
把MyDatabase()方法改成构造函数,去掉void关键字,实例化时会自动初始化数据库连接:
public class MySQLDatabase { private SQLiteConnection conn; // 修正为构造函数,移除void关键字 public MySQLDatabase() { // 注意SQLite连接字符串的标准格式,需指定Data Source conn = new SQLiteConnection("Data Source=mydatabase.db3"); conn.CreateTable<MyTable>(); } public void InsertData(int gameid, string preorder,string rating,string standards,string overpriced,string agerating,string gameplay,string recommend,string impact) { MyTable myNewTable = new MyTable { GameId = gameid, PreOrder = preorder, Rating = rating, Standards = standards, OverPriced = overpriced, AgeRating = agerating, Gameplay = gameplay, Recommend = recommend, Impact = impact }; conn.Insert(myNewTable); } public void CloseConnection() { conn.Close(); } }
2. 避免控件空引用
调用QuestionX.ToString()时,如果Question1等控件未正确初始化(为null),也会触发异常,建议添加空值检查:
private void Button_Pressed(object sender, EventArgs e) { MySQLDatabase db = new MySQLDatabase(); // 空值保护:控件为空时返回空字符串 string q1 = Question1?.ToString() ?? string.Empty; string q2 = Question2?.ToString() ?? string.Empty; string q3 = Question3?.ToString() ?? string.Empty; string q4 = Question4?.ToString() ?? string.Empty; string q5 = Question5?.ToString() ?? string.Empty; string q6 = Question6?.ToString() ?? string.Empty; string q7 = Question7?.ToString() ?? string.Empty; string q8 = Question8?.ToString() ?? string.Empty; db.InsertData(5, q1, q8, q4, q3, q5, q6, q7, q2); db.CloseConnection(); }
3. 优化连接管理(可选)
为避免连接泄漏,建议显式打开连接,或者用using语句自动管理生命周期:
// 构造函数里显式打开连接 public MySQLDatabase() { conn = new SQLiteConnection("Data Source=mydatabase.db3"); conn.Open(); conn.CreateTable<MyTable>(); } // 或者在插入前检查连接状态 public void InsertData(...) { if (conn.State != System.Data.ConnectionState.Open) conn.Open(); // 插入逻辑... }
内容的提问来源于stack exchange,提问作者sunboy
相关产品推荐
相关产品推荐

