2016-12-22 154 views
1

我有一個數據表,我試圖從數據表中選擇一些行。
對於PracticeIDs 1 & 37而言,它工作良好,但由於某種原因,當它到達數據的最後一行(ID 7)時,它不會從數據表中拉出記錄。DataTable選擇不返回值

任何想法?

 //create datatable 
     DataTable dt = new DataTable(); 
     dt.Columns.Add("PracticeID"); 
     dt.Columns.Add("AuthorID"); 

     //add data(in real code, this is pulled from the database) 
     dt.Rows.Add(1, 87); 
     dt.Rows.Add(37, 202); 
     dt.Rows.Add(1, 268); 
     dt.Rows.Add(7, 262); 

     //get distinct practiceids into datatable 
     DataView dv = new DataView(dt); 
     DataTable dtDistinctIDs = dv.ToTable(true, "PracticeID"); 

     //for each practice, get a list of the authors 
     foreach (DataRow practiceRow in dtDistinctIDs.Rows) 
     { 

      DataRow[] dra = dt.Select("PracticeID = " + practiceRow["PracticeID"].ToString()); 
     } 
+2

'......它不會從數據表中拉出記錄。<=請更具描述性。有例外嗎?循環沒有達到它?你的電腦凍結了嗎?沒有....等等。我們看不到你的屏幕,所以我們唯一能做的事情就是發生了什麼,然後猜測它爲什麼發生。如果有例外,請儘可能多地包含它(消息,類型,內部例外)。如果沒有例外,請詳細說明行爲。同時用這個信息更新你的問題,不要用它創建一個評論。 – Igor

回答

1

這很難發現,因爲這種行爲似乎違反直覺。您正在嘗試的問題源自沒有數據類型的列。我現在也解釋不清楚,但嘗試你的代碼更改爲以下,並預期它會工作:

DataTable dt = new DataTable(); 
dt.Columns.Add("PracticeID",typeof(int)); //THIS IS THE IMPORTANT BIT 
dt.Columns.Add("AuthorID"); 

//add data(in real code, this is pulled from the database) 
dt.Rows.Add(1, 87); 
dt.Rows.Add(37, 202); 
dt.Rows.Add(1, 268); 
dt.Rows.Add(7, 262); 

//get distinct practiceids into datatable 
DataView dv = new DataView(dt); 
DataTable dtDistinctIDs = dv.ToTable(true, "PracticeID"); 

//for each practice, get a list of the authors 
foreach (DataRow practiceRow in dtDistinctIDs.Rows) 
{ 

    DataRow[] dra = dt.Select("PracticeID = " + (int)practiceRow["PracticeID"]); 
} 

編輯:

其實我錯了,這是簡單的。真正的問題是您的Select沒有圍繞該字段的',因爲默認情況下DataColumn是字符串。因此,使用您的原始代碼,只需更改以下內容即可:

DataRow[] dra = dt.Select("PracticeID = '" + practiceRow["PracticeID"].ToString() + "'"); 
+0

或使用: DataRow [] dra = dt.Select(「PracticeID ='」+ practiceRow [「PracticeID」]。ToString()+「'」); - 如果您想將ID作爲字符串對待 – jondow

+0

是@jondow,只是在您評論時進行編輯。謝謝:) – Pikoh

+0

謝謝。這就是訣竅! –