2012-08-22 46 views
1

所以下面的代碼將不會進入循環來填充我的列表框。我的列表框顯示「全選」並測試輸出「進入循環」。什麼會導致嘗試不失敗,但循環不執行?來自C#的Oracle連接沒有讀取數據

conn.Open(); 
OracleCommand executeQuery = new OracleCommand(sql, conn); 
executeQuery.CommandType = CommandType.Text; 

OracleDataReader dr = executeQuery.ExecuteReader(); 

lstInstructors.Items.Clear(); 
lstInstructors.Items.Add(new ListItem("Select All", "%")); 

string test = "entering loop"; 

while (dr.Read()) 
{ 
    test = "start reading items"; 
    lstInstructors.Items.Add(new ListItem(dr.GetValue(0).ToString())); 
    test += dr.GetValue(0).ToString(); 
} 
+2

因爲查詢返回沒有記錄? – mellamokb

+0

您應該謹慎使用.NET中內置的OracleClient。 Microsoft [已棄用它](http://msdn.microsoft.com/zh-cn/library/347d2380),並且[正在計劃刪除它](http://msdn.microsoft.com/zh-cn/library/77d8yct7 )。 –

+1

@mellamokb有趣的是,顯而易見的東西可以從我們身邊溜走。我確實獨立測試了sql查詢,但硬編碼了一個未被傳遞的變量。如果你沒有提到我可能花了幾個小時的時間進行調試。謝謝。 – Geekender

回答

0

「sql」的值設置在哪裏?

完成填充填充列表框的另一種方法是填充數據表,然後將其綁定到列表框。

OracleDataAdapter da = new OracleDataAdapter(); 
DataTable dt = new DataTable(); 
var sql = "some sql string"; 
OracleCommand executeQuery = new OracleCommand(sql, conn); 
using (da = new OracleDataAdapter(executeQuery)) 
{ 
    da.Fill(dt); 
} 
lstInstructors.DataSource = dt; 
lstInstructors.DataTextField = "Field Name from sql"; 
lstInstructors.DataValueField = "Field Value from sql"; 
lstInstructors.DataBind(); 
lstInstructors.Items.Insert(0, new ListItem("Choose", "Choose")); 
lstInstructors.SelectedValue = "Choose"; 

務必使用System.Data

我從SqlDataAdapter的適應了這個所以可能有一些語法差異包括。