我的目標是要連接到一個MDB數據庫(存儲在本地),通過它,並獲得以下信息:任何人都可以告訴我爲什麼我總是收到「對象引用未設置爲對象的實例」。運行此代碼時?
-The所有的表存在於數據庫中
列-The指名道姓以及它們在數據庫的每個表中的類型。
在開發我以前在答覆中指出的代碼下面的計算器問題
need to find the type of the column of DB
的代碼,我實現寫在接受答案的代碼,它適合我的需要。以下是我迄今爲止:
DataSet dtImportedTables = new DataSet();
Globals.strSQLQuery = "SELECT * FROM {0}";
//try
//{
Globals.conConnection = new OleDbConnection(Globals.strConnection);
Globals.conConnection.Open();
foreach (DataRow row in Globals.tblSchemaTable.Rows)
{
DataTable dt = new DataTable();
OleDbCommand command = new OleDbCommand(String.Format(Globals.strSQLQuery, row["TABLE_NAME"] as String), Globals.conConnection);
dt.Load(command.ExecuteReader(CommandBehavior.SchemaOnly));
dtImportedTables.Tables.Add(dt);
}
Globals.conConnection.Close();
string temp="";
int k;
foreach (DataTable dt in dtImportedTables.Tables)
{
k = 0;
foreach (DataColumn dc in dt.Columns)
{
Globals.arrColumnNamesList[k] = dc.ColumnName;
Globals.arrColumnTypesList[k] = dc.DataType.ToString();
temp += k+ ") "+Globals.arrColumnNamesList[k] + Environment.NewLine + Globals.arrColumnTypesList[k] + Environment.NewLine;
k++;
}
}
注意以下幾點:
-I正在使用Visual Studio 2012,這是一個Windows窗體應用程序,在C#編程
-The連接工作正常(至少根據調試情況),並且所討論的數據庫僅由一個包含多列的表組成。
錯誤-The完整的調試描述是: $ {例外 「對象引用不設置到對象的實例。」} System.Exception的{} System.NullReferenceException
導向軸Globals.arrColumnTypesList和Globals.arrColumnNamesList是字符串類型的數組。
- 在第三條指令行中,我爲調試目的註釋了「try」部分(即,如果保持不變,程序將因爲我詢問的錯誤而無法執行整個部分,因此不會讓調試器發出警告我的錯誤)。
- 我不得不從上面提到的stackoverflow問題中找到的原始版本修改這兩個foreach語句。正如它寫的那樣,編譯器會給我一個錯誤。發生
-The問題就在這裏:
Globals.arrColumnTypesList[k] = dc.DataType.ToString();
雖然期待通過有關此異常的其他問題,我發現,通常如果表達式返回NULL值(在這種情況下,我的理解是它拋出,這意味着dc.DataType是NULL)。但是,在VisualStudio的調試工具中,DataType根本不是NULL,它實際上包含值「System.String」。我盤算了一下,ToString()方法本來的這種奇怪的行爲的原因,所以我改變了表達如下:
Globals.arrColumnTypesList[k] = dc.DataType.Name;
它給了我同樣的錯誤,這一次dc.DataType.Name有一個值的「字符串」,顯然是字符串類型。
有人能幫我弄清楚發生了什麼事嗎?調試器可能誤導我說錯誤在那一行,而真正的問題可能在其他地方?
您確定Globals.arrColumnNamesList不爲空嗎? –
是否將Globals.arrColumnTypesList [k]指定爲新數組? – anthr
你在「調試」模式而不是「發佈」下編譯/運行了它嗎?有時,在發佈模式下進行調試會導致出現異常行數/中斷。 –