2015-09-25 62 views
0

我運行DataTable.load(SqlDataReader)後,DataTable似乎是空的,但DataReader包含結果(可以在調試時看到)。DataTable空後.load(SqlDataReader)

任何人都可以幫我這個嗎?我似乎無法找到這個問題的任何解決方案,也不能找到我的算法中的一個錯誤..我發現一些使用DataAdapter的解決方案& Fill(),但我只是好奇這個問題」。 我的代碼:

DataTable DeviceProperties = new DataTable(); 
     try 
     { 
      string query = "SELECT PropertyID, PropertyName from DeviceProperties WHERE DeviceID = @DeviceID;"; 
      using (SqlCommand cmdSelectDeviceProperties = new SqlCommand(query, connectionDBTest)) 
      { 
       cmdSelectDeviceProperties.Parameters.Add("@DeviceID", SqlDbType.BigInt).Value = deviceID; 
       using (SqlDataReader rdrSelectDeviceProperties = cmdSelectDeviceProperties.ExecuteReader()) 
       { 
        if (rdrSelectDeviceProperties.HasRows) 
         DeviceProperties.Load(rdrSelectDeviceProperties); 
        else 
         Console.WriteLine("No Device Properties found.."); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Error getDeviceProperties: " + ex); 
     } 
     return DeviceProperties; 

FYI:在rdrSelectDeviceProperties.HasRows經過每一次,所以讀者肯定包含調試過程中的一些價值..正確的結果可以在rdrSelectDeviceProperties發現,..但DeviceProperties數據表保持空...

確切問題:調試時數據表看起來是空的,因爲懸停在上面顯示:'{}'。 其餘代碼根據數據表作出響應,因爲數據表爲空。 SOLUTION:當你按下放大鏡,你得到的數據表中的數據表示。 我的錯誤是在代碼的其餘部分(比較數據表中的數據與字符串,而不使用'.ToString()')。

從我的錯誤中學習..

+0

你試過'使用(VAR daSelectDeviceProperties =新SqlDataAdapter的(查詢,connectionDBTest ))daSelectDeviceProperties.Fill(DeviceProperties);'而不是? ' –

+0

感謝您的回答,但是您能否詳細說明放置上述代碼的位置? 並在第二個注意,我有點想知道爲什麼DataTable DeviceProperties是空的,即使我使用包含結果的SqlReader的負載.. – Atoq

回答

0

不知道是什麼導致了這個問題,但我會用SqlDataAdapter.Fill(dataTable),而不是DataTable.Load(sqlDatareader)

DataTable tblSelectDeviceProperties = new DataTable(); 
using (var daSelectDeviceProperties = new SqlDataAdapter(query, connectionDBTest)) 
{ 
    // no need to open/close the connection with DataAdapter.Fill 
    daSelectDeviceProperties.Fill(tblSelectDeviceProperties); 
} 
if (tblSelectDeviceProperties.Rows.Count == 0) 
    Console.WriteLine("No Device Properties found.."); 
+0

感謝您的迴應..我想我找出了'問題'是什麼。 調試時,數據表預覽看起來是空的(顯示'{}'),但數據表仍然填充了數據閱讀器的結果。之所以我的程序其餘部分沒有做任何事情,是因爲我在索引表格時犯了一個錯誤(開心快樂的歡樂!)。但是,非常感謝你們倆,並且很抱歉浪費你們時間。 – Atoq

+0

@ user5110371:你可以點擊調試器中的放大鏡來觀看DataTable數據。 –

+0

好啊..有點也解決了它..那麼,這只是你有點感到愚蠢的日子之一.. :)再次感謝迴應。 – Atoq