在使用 MySQL 數(shù)據(jù)庫時(shí),有時(shí)候會(huì)出現(xiàn)“未將對(duì)象引用設(shè)置到對(duì)象的實(shí)例”這個(gè)錯(cuò)誤提示。這個(gè)錯(cuò)誤通常發(fā)生在連續(xù)訪問數(shù)據(jù)庫時(shí),比如在循環(huán)內(nèi)進(jìn)行多次數(shù)據(jù)庫操作。
try { string sql = "SELECT * FROM users"; MySqlCommand command = new MySqlCommand(sql, connection); MySqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { string name = reader.GetString("name"); int age = reader.GetInt32("age"); // 這里有可能出現(xiàn)“未將對(duì)象引用設(shè)置到對(duì)象的實(shí)例”的錯(cuò)誤 Console.WriteLine("{0} {1}", name, age); } reader.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message); }
發(fā)生這個(gè)錯(cuò)誤的原因是,當(dāng)使用 SqlDataReader 對(duì)象從數(shù)據(jù)庫中讀取數(shù)據(jù)時(shí),如果沒有數(shù)據(jù)可以讀取,那么這個(gè)對(duì)象會(huì)返回 null。如果我們沒做好對(duì)這種情況的處理,就會(huì)出現(xiàn)“未將對(duì)象引用設(shè)置到對(duì)象的實(shí)例”的錯(cuò)誤。
要解決這個(gè)問題,我們需要在使用 SqlDataReader 對(duì)象讀取數(shù)據(jù)之前,先判斷它的 HasRows 屬性是否為 true。如果為 false,那么就不應(yīng)該執(zhí)行任何操作。
try { string sql = "SELECT * FROM users"; MySqlCommand command = new MySqlCommand(sql, connection); MySqlDataReader reader = command.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { string name = reader.GetString("name"); int age = reader.GetInt32("age"); Console.WriteLine("{0} {1}", name, age); } } reader.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message); }
通過加入判斷語句,我們可以避免“未將對(duì)象引用設(shè)置到對(duì)象的實(shí)例”的錯(cuò)誤發(fā)生。這也是在使用 MySQL 數(shù)據(jù)庫時(shí)需要注意的細(xì)節(jié)之一。
下一篇mysql字段切分