2012-03-30 4 views
0

Dies ist mein erster Versuch, ein Programm zu schreiben, das von Grund auf auf eine Datenbank zugreift, anstatt lediglich die bestehenden Programme meiner Firma zu modifizieren. Es ist auch das erste Mal, dass ich VB.Net 2010 benutze, da unsere anderen Programme in VB6 und VB.NET 2003 geschrieben sind. Wir verwenden SQL Server 2000, sollten aber bald auf 2008 upgraden, wenn das relevant ist.Wie ordne ich die Ergebnisse einer SQL-Abfrage mehreren Variablen in VB.NET zu?

ich in die Datenbank erfolgreich verbinden und Daten über Abfrage ziehen und zuweisen, zum Beispiel, um die Ergebnisse zu einer Combobox, wie hier:

Private Sub PopulateCustomers() 
    Dim conn As New SqlConnection() 
    Dim SQLQuery As New SqlCommand 
    Dim daCustomers As New SqlDataAdapter 
    Dim dsCustomers As New DataSet 

    conn = GetConnect() 
    Try 
     SQLQuery = conn.CreateCommand 
     SQLQuery.CommandText = "SELECT Customer_Name, Customer_ID FROM Customer_Information ORDER BY Customer_Name" 
     daCustomers.SelectCommand = SQLQuery 
     daCustomers.Fill(dsCustomers, "Customer_Information") 

     With cboCustomer 
      .DataSource = dsCustomers.Tables("Customer_Information") 
      .DisplayMember = "Customer_Name" 
      .ValueMember = "Customer_ID" 
      .SelectedIndex = -1 
     End With 

    Catch ex As Exception 
     MsgBox("Error: " & ex.Source & ": " & ex.Message, MsgBoxStyle.OkOnly, "Connection Error !!") 
    End Try 

    conn.Close() 

End Sub 

Ich habe auch kein Problem damit, eine Abfrage ausführen, die eine zieht einzelnes Feld und weist es mit ExecuteScalar einer Variablen zu. Was ich nicht herausgefunden habe, wie zu tun ist (und nicht scheinen kann, auf die richtige Kombination von Suchbegriffen zu treffen, um es woanders zu finden) ist, wie man eine Abfrage ausführt, die eine einzelne Zeile zurückgibt und dann verschiedene Felder innerhalb setzt diese Zeile zu einzelnen Variablen.

Im Fall ist es relevant, hier wird die GetConnect Funktion in dem obigen Code verwiesen:

Public Function GetConnect() 
    conn = New SqlConnection("Data Source=<SERVERNAME>;Initial Catalog=<DBNAME>;User Id=" & Username & ";Password=" & Password & ";") 
    Return conn 
End Function 

Wie führe ich eine Abfrage, um jedes Feld der zurückgegebenen Zeile auf einzelne Variablen zuweisen?

Antwort

0

Wie @Roland Shaw, würde ich die DataReader- Weg gehen, sondern eine andere Art und Weise.

würde durch

dsCustomers.Tables("Customer_Information").Rows 

Schleife sein Vergessen Sie nicht, um zu überprüfen, ob es irgendwelche Reihen gibt es in.

Google VB.Net und DataRow für weitere Informationen.

+0

Während die DataReader-Route wahrscheinlich die beste ist (und die Art, wie ich gelandet bin), bin ich immer noch dabei, diese als die beste Antwort für die Beantwortung der spezifischen Frage zu bezeichnen. –

2

Sie wollen wahrscheinlich einen Blick auf die SqlDataReader nehmen:

Using con As SqlConnection = GetConnect() 
     con.Open() 

     Using cmd As New SqlCommand("Stored Procedure Name", con) 
      cmd.CommandType = CommandType.StoredProcedure 

      cmd.Parameters.Add("@param", SqlDbType.Int) 
      cmd.Parameters("@param").Value = id 

      ' Use result to build up collection 
      Using dr As SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection Or CommandBehavior.SingleResult Or CommandBehavior.SingleRow) 
       If (dr.Read()) Then 
        ' dr then has indexed columns for each column returned for the row 
       End If 
      End Using 
     End Using 
    End Using 
+0

Ich setzte mich endlich hin und las mir den SqlDataReader an, nicht sicher, warum ich ihn beim ersten Anschauen nicht aufgegriffen hatte, musste einfach auf schlecht geschriebene Tutorials gestoßen sein. Ich benutze jetzt einen DataReader und es funktioniert perfekt. (Obwohl ich die andere Antwort als die beste ausgewählt habe, habe ich diese ebenfalls verbessert, wenn ich dazu in der Lage wäre.) –

+1

Die meisten Tutorials gehen direkt zu Dataset für datensensitive Steuerelemente, wegen der Assistenten und ein wenig Setup Sie sehen aus wie ein Profi, aber ein Ausstecher zu sein. Also herzlichen Glückwunsch zu Ihrer Beförderung. :) –

Verwandte Themen