2014-04-09 57 views
0

我似乎無法得到這個工作。我想用相同的數據填充多個下拉列表。每次運行相同的查詢效率不高。這裏就是我已經設法弄到:用一個SQL查詢填充多個下拉列表

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If (Not Page.IsPostBack) Then 
     Dim ddlArray = {lst1, lst2, lst3, lst4, lst5, lst6, lst7, lst8, lst9, lst10} 
     PopulateObjectList(ddlArray) 
    End If 
End Sub 

Sub PopulateObjectList(ByVal ddlArray As Array) 
    strSQL = "select distinct Object_ID, Object_Description from object" 
    objCmd = New SqlCommand(strSQL, Master.DBConnect()) 

    For Each ddl In ddlArray 
     ddl.DataSource = objCmd.ExecuteReader(CommandBehavior.CloseConnection) 
     ddl.DataValueField = "Object_ID" 
     ddl.DataTextField = "Object_Description" 
     ddl.DataBind() 
     ddl.Items.Insert(0, "Select Object") 
    Next 

    Call Master.DBDisconnect() 
End Sub 

當然,這給出了錯誤:

ExecuteReader requires an open and available Connection. The connection's current state is closed. 

因爲初始數據源分配後,連接被關閉。我會想象我可以創建一個變量來保存數據,然後將其綁定到每個下拉列表,但數據集不起作用,我不知道該怎麼辦。

如何使用相同的數據填充10個下拉列表中的每個列表,而無需在數據庫上運行10個單獨的查詢?

回答

1
CommandBehavior.CloseConnection 

您在首次使用後關閉連接。相反,讀取數據一次,將其複製到對象列表並綁定到該列表。

我想知道爲什麼DataSet不起作用。

Sub PopulateObjectList(ByVal ddlArray As Array) 
strSQL = "select distinct Object_ID, Object_Description from object" 

sqlCon = Master.DbConnect() 

da = New SqlDataAdapter(strSQL, sqlCon) 
ds = New DataSet 

da.Fill(ds) 

For Each ddl In ddlArray 
    ddl.DataSource = ds 
    ddl.DataValueField = "Object_ID" 
    ddl.DataTextField = "Object_Description" 
    ddl.DataBind() 
    ddl.Items.Insert(0, "Select Object") 
Next 

Call Master.DBDisconnect() 
End Sub 
+0

簡單地刪除,然後會出現錯誤:'已經有一個打開的DataReader與這個Command必須首先關閉(我也試過)。 – Dan

+0

請發表一個你將如何解決這個問題的代碼示例。它不適合我嘗試的方式。 – Dan

+0

無法驗證它,但這將是我的方法。 –

相關問題