2017-09-08 137 views
0

我很欣賞這個問題,但之前我已經問過,在過去的5天裏,我花了所有的時間在網上搜索,還沒有找到解決我的問題的方法。MySqlDataReader - 閱讀器關閉時讀取無效嘗試

我想用C#從MySQL數據庫中檢索記錄。

代碼編譯罰款,但是當我測試應用程序,並嘗試將數據綁定到一個DataTable()了MySqlDataReader引發以下異常

「無效嘗試讀取時讀取器已關閉」

我一直無法診斷問題;據我所知,讀者在我嘗試閱讀之前沒有關閉。

方法如下:

/// <summary> 
    /// Performs a select statement 
    /// </summary> 
    /// <param name="query">String of the SQL Query</param> 
    /// <param name="parameters">List of SQL Parameters</param> 
    /// <returns>DataTable</returns> 
    public DataTable SelectQuery(string query, List<MySqlParameter> parameters) 
    { 
     MySqlConnection connection = new MySqlConnection(connectionString); 
     MySqlCommand cmd = new MySqlCommand(query, connection); 
     foreach(MySqlParameter p in parameters) 
     { 
      cmd.Parameters.Add(p); 
     } 

     connection.Open(); 
     DataTable dt = new DataTable(); 
     dt.Load(cmd.ExecuteReader()); 
     return dt; 
    } 

實際的數據庫連接工作正常,我已經放在手錶上的MySqlConnection和連接被打開,因爲它應該。

我傳遞了以下查詢此方法:

string query = "SELECT IDS_USER, USRNM, PSSWRD, USR_SALT FROM factUser WHERE USRNM = ?username"; 

我在MySQL工作臺已經測試並返回正確的數據。

當我觀看MySqlCommand時,參數已添加到命令中,因爲它們應該是。

任何幫助將不勝感激,因爲我絕對難住!

+0

您是否嘗試設置的CommandType =文字? – hardkoded

+0

嗨kblok,是的,我試着設置CommandType爲文本,我仍然有同樣的問題 – Smithygotlost

+0

你怎麼使用你的數據表?你使用它只是將數據添加到另一個對象或數據表中直接在框架中使用? –

回答

0

您已經很近了,但您必須將ExecuteReader()函數設置爲MySqlDataReader。另外,你應該養成使用using聲明的習慣,特別是在SQL相關問題上,就好像你沒有正確處理你的連接一樣,你會很快用完。使用using語句會自動處理using語句中的項目。

您使用相應的變量代碼集

MySqlConnection connection = new MySqlConnection(connectionString); 
MySqlCommand cmd = new MySqlCommand(query, connection); 
foreach(MySqlParameter p in parameters) 
{ 
    cmd.Parameters.Add(p); 
} 

connection.Open(); 
DataTable dt = new DataTable(); 
MySqlDataReader reader = cmd.ExecuteReader(); 
dt.Load(reader); 
return dt; 

使用合適的using語句

using(MySqlConnection connection = new MySqlConnection(connectionString)){ 
    using(MySqlCommand cmd = new MySqlCommand(query, connection)){ 
      foreach(MySqlParameter p in parameters) 
      { 
       cmd.Parameters.Add(p); 
      } 

      connection.Open(); 
      DataTable dt = new DataTable(); 
      using(MySqlDataReader reader = cmd.ExecuteReader()){ 
       dt.Load(reader); 
       return dt; 
      } 
     } 
    } 
+0

嗨,Tommy,謝謝你的回答,我已經嘗試了你發佈的兩個版本的代碼,但唉,我仍然遇到同樣的問題!我檢查了查詢和數據庫連接100次,他們都工作得很好:( – Smithygotlost

+0

你測試過,如果你可以讀取代碼中的數據?'MySqlDataReader reader = cmd.ExecuteReader();'行後,嘗試一個while循環來查看你是否可以看到這些記錄。while(reader)。閱讀()){//訪問結果}' – Tommy

+0

我已經試過while循環了,我把一個監視器放在變量上,我可以看到它找到了4個數據庫列和主鍵,但是當我打開結果視圖 – Smithygotlost

相關問題