2012-06-18 21 views
4

我已經搜索了好幾個小時了,正在尋找解決這個問題的方法。我正在嘗試使用下面的代碼和正確的查詢從我的數據庫中獲取信息。我知道這些查詢的工作原理,因爲我已經在MySQL工作臺中測試了它們。我不斷收到錯誤:在調用read之前無效訪問字段()

Invalid attempt to access field before calling read()

正如你所看到的,我不調用read(),和我的研究纔拿出沒有使用正確的數據庫,我也證明是正確的了。關於爲什麼我收到此錯誤的任何想法?先謝謝您的幫助。

public static string ExecuteSelect(string query) 
{ 
    //Example query is: SELECT entity_id FROM catalog_product_flat_1 WHERE sku='itemSku'; 
    string statement = ""; 

    MySqlCommand myCommand = new MySqlCommand(query, _conn); 

    MySqlDataReader myReader; 
    myReader = myCommand.ExecuteReader(); 
    myReader.Read(); 

    statement = myReader.GetString(0); 
    myReader.Close(); 

    return statement; 
} 
+0

你檢查的'讀的返回值()'它是否返回true(表明有結果被讀取)或false(表示沒有)。 – CodingGorilla

回答

7

不確定這是你的情況的問題,但你應該總是檢查Read()的結果。例如

if (myReader.Read()) 
{ 
    statement = myReader.GetString(0); 
} 

編輯:還有什麼你實際上做的是獲取一個標量,因此你可以使用的ExecuteScalar()

return (myCommand.ExecuteScalar() ?? string.Empty).ToString(); 
//also rename your method appropriately 
+0

這是一個很好的觀點。我添加了這個,並將保留它,但不幸的是它並沒有解決我的問題 – SubxZero

+0

@SubxZero所以它傳遞'if()'並仍然拋出錯誤?你肯定列0實際上是一個字符串類型嗎?試着做'statement = myReader.GetValue(0).ToString()',看看是否成功。 – CodingGorilla

+0

實際上,我在代碼的錯誤位置添加了第一個建議並更正了它,並且它工作正常。非常感謝你! – SubxZero

相關問題