2013-12-16 2 views
2

Я вынужден использовать ODBC, и я хотел бы привязать DataSet к FormView. До сих пор у меня есть этот код:Связывание FormView с DataSet

Sub lookup(data As String, city As String) 

    Dim query As String = "SELECT FIND_KORT_VEJ_FUL.STREET_NAME, FIND_KORT_VEJ_FUL.ZIPCODE, UXOR_CITY_DK.NAME AS cityName FROM UXOR_CITY_DK " & _ 
    "Join(FIND_KORT_VEJ_FUL) " & _ 
    "ON UXOR_CITY_DK.KOMMUNE_KODE=FIND_KORT_VEJ_FUL.MUNICIPALITY_CODE WHERE UXOR_CITY_DK.NAME = '" & city & "' " & _ 
    "LIMIT 5" 

    Dim connectionString As String = System.Configuration.ConfigurationManager.ConnectionStrings("ODBCDataConnectionString").ConnectionString 

    Dim initialDataSet As New DataSet("initial") 
    Dim dt As DataSet = GetDataSetFromAdapter(initialDataSet, connectionString, query) 

    FormView1.DataSource = dt 
    FormView1.DataBind() 

End Sub 

Public Function GetDataSetFromAdapter(ByVal dataSet As DataSet, ByVal connectionString As String, ByVal queryString As String) As DataSet 

    Using connection As New OdbcConnection(connectionString) 
     Dim adapter As New OdbcDataAdapter(queryString, connection) 

     ' Open the connection and fill the DataSet. 
     Try 
      connection.Open() 
      adapter.Fill(dataSet) 
     Catch ex As Exception 

     End Try 
     ' The connection is automatically closed when the 
     ' code exits the Using block. 
    End Using 

    Return dataSet 
End Function 

FormView:

<asp:FormView ID="FormView1" runat="server" EmptyDataText="Ingen data"> 
      <ItemTemplate> 
       <table> 
        <tr> 
         <td>Postnummer: <%#Eval("MUNICIPALITY_CODE") %></td> 
        </tr> 
        <tr> 
         <td>Indbyggere: </td> 
        </tr> 
        <tr> 
         <td>Geografisk lokation: </td> 
        </tr> 
        <tr> 
         <td>Roskilde ligger i <a href="#">Roskilde kommune</a></td> 
        </tr> 
        <tr> 
         <td><br /><h3><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></h3></td> 
        </tr> 
        <tr> 
         <td>Borgmester: </td> 
        </tr> 
        <tr> 
         <td>Antal veje i kommunen: #</td> 
        </tr> 

       </table> 
      </ItemTemplate> 
     </asp:FormView> 

Я проверить запрос и строки запроса, и работу. FormView не заполняется вышеуказанным кодом. Возможно ли связать FormView с DataSet? или есть лучший метод?

ответ

1

Я заметил несколько вещей, которые вам, вероятно, нужно изменить здесь. Ниже приведена измененная функция. Основная проблема заключается в том, что соединение не закрывается. Независимо от того, что вы можете прочитать в другом месте, SQL-соединения не закрываются блоком Using. Однако я не уверен насчет OdbcConnection. Я бы рекомендовал включать закрывающие строки на всякий случай.

Public Function GetDataSetFromAdapter(ByVal dataSet As DataSet, ByVal connectionString As String, ByVal queryString As String) As DataSet 

    Using connection As New OdbcConnection(connectionString) 
     Dim adapter As New OdbcDataAdapter(queryString, connection) 

     ' Open the connection and fill the DataSet. 
     Try 
      connection.Open() 
      adapter.Fill(dataSet) 
      connection.Close() 
     Catch ex As Exception 
      connection.Close() 'This is necessary to avoid accidental multiple connections. 
     End Try 
     ' The connection is automatically closed when the 
     ' code exits the Using block. 
    End Using 

    Return dataSet 
End Function 

Но я считаю, что настоящая проблема заключается в том, что вы не ссылаетесь на таблицу. Набор данных содержит только таблицы, вы должны указать их при привязке ...

Sub lookup(data As String, city As String) 

    Dim query As String = "SELECT FIND_KORT_VEJ_FUL.STREET_NAME, FIND_KORT_VEJ_FUL.ZIPCODE, UXOR_CITY_DK.NAME AS cityName FROM UXOR_CITY_DK " & _ 
    "Join(FIND_KORT_VEJ_FUL) " & _ 
    "ON UXOR_CITY_DK.KOMMUNE_KODE=FIND_KORT_VEJ_FUL.MUNICIPALITY_CODE WHERE UXOR_CITY_DK.NAME = '" & city & "' " & _ 
    "LIMIT 5" 

    Dim connectionString As String = System.Configuration.ConfigurationManager.ConnectionStrings("ODBCDataConnectionString").ConnectionString 

    Dim initialDataSet As New DataSet("initial") 
    Dim dt As DataSet = GetDataSetFromAdapter(initialDataSet, connectionString, query) 

    FormView1.DataSource = dt.Tables(0) 
    FormView1.DataBind() 

End Sub 
+0

Спасибо за быстрый ответ, но это не имеет значения, форма формы остается пустой, когда я использую измененную функцию. – user1359448

+0

@ user1359448 Вы пытались поставить точку останова на databind? Если нет, сделайте это и убедитесь, что в таблице есть строки и данные. – Lopsided

+0

Нет, я не разрабатываю локально, код размещен и im работает поверх FTP. Если я запустил запрос непосредственно из студии управления, я верну данные. – user1359448

Смежные вопросы