2016-07-27 2 views
0

Erste Frage hier, und Vorwarnung Ich bin sehr neu im Programmieren im Allgemeinen, versuche nur, die Grundlagen herauszufinden.Hinzufügen von Combobox-Elementen aus SQL Server mit einzelner (und variierender) Spalte

Grundsätzlich versuche ich, alle Elemente in einer angegebenen Liste von meinem SQL Server auszuwählen, sie zu einem Array hinzuzufügen und dann eine Combobox mit diesem Array zu füllen.

Der SQL-Server-Struktur ist wie folgt: Just a representation

Der Benutzer wählt, welches Produkt sie bauen, wenn sie sich anmelden, und dann würde ich eine Combobox gerne mit all den Teilen gefüllt werden, die betreffen dieser Gegenstand.

Das aktuelle Codebeispiel

Public Class frmProduct 
    Private Sub frmProduct_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     Dim mycon As SqlConnection = New SqlConnection('connection string') 
     mycon.Open() 
     Using mycon 
      Dim prodlist As String = frmMain.cmbProduct.SelectedItem 
      Dim cmds As String = "SELECT DISTINCT(Product) FROM [Products] where Product = @prodlist" 
      Dim cmde As New SqlCommand(sqlt, mycon) 
      cmde.Parameters.AddWithValue("@Product", prodlist) 
      Dim dr As SqlDataReader = scmd.ExecuteReader 
      If dr.HasRows() Then 
       cmbFailure.Items.Add(dr.GetString(0)) 
      End If 
      scmd.ExecuteNonQuery() 
     End Using 

    End Sub 
End Class 

Der Benutzer wählt das Produkt auf dem Login-Formular, und das ausgewählte Produkt wird in die Stückliste Form übertragen.

Der Fehler, den ich gerade empfange, der wahrscheinlich der erste von vielen ist, ist "Ungültiger Spaltenname Produkt". Ich dachte, das Problem könnte sein, dass das ausgewählte Produkt nicht übertragen wird, aber ich habe ein Etikett hinzugefügt, bei dem ich den Text so ändere, dass er gleich "prodlist" ist und den Etikettentext genau ändert.

Wieder bin ich frisches Fleisch, also entschuldige ich mich für offensichtliche Fehler. Danke für Ihre Hilfe!

+0

Die Fehlermeldung besagt, dass Ihre 'Products' Tabelle keine Spalte mit dem Namen 'Product' hat. – jmcilhinney

+0

Ihr SQL-Code macht auch dann keinen Sinn, wenn diese Spalte existiert. Ihr Sprichwort "Holen Sie alle Produktwerte aus der Produkttabelle, in der der Produktwert einer Eingabe entspricht". Das bedeutet, dass Sie immer nur kein Ergebnis oder ein einzelnes Ergebnis erhalten, das Ihrer Eingabe entspricht. Sie sprechen über Produkte und Teile, daher sollten Sie sicher eine Produkttabelle mit einer ProductId-Spalte als Primärschlüssel und dann eine Parts-Tabelle mit einer ProductId-Spalte als Fremdschlüssel haben. Sie erhalten dann alle PartName-, Description- oder ähnliche Werte aus dieser Parts-Tabelle basierend auf productId. – jmcilhinney

Antwort

0

In dem Bild, das Sie anbrachten, sind "Product1, Product2, Product3" feste Spalten? Wenn dies der Fall ist, müssen Sie diese Spalten in Ihrer SELECT-Anweisung verwenden. Dies ist ein schlechtes Design, wird aber funktionieren. Ich nehme an, dass es eine Lernübung ist, also können Sie später Ihr Projekt um 2 Tabellen erweitern, eines für Produkte und andere für Geschäftsteile von Produkten.

0

Informationen über den Code.

Private Sub frmProduct_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Dim mycon As SqlConnection = New SqlConnection('connection string') 
    Dim cmds As String = "SELECT DISTINCT(Product) FROM [Products] where Product = @prodlist" 

    Try 
     ' Most of the DB will having a connection fail, so programmer must set a try catch for it ' 
     mycon.Open() 
     Using mycon 
      Dim prodlist As String = [Form].[ComBoBox].SelectedItem 
      Dim cmde As New SqlCommand(sqlt, mycon) 
      cmde.Parameters.AddWithValue("@Product", prodlist) 
      Dim dr As SqlDataReader = scmd.ExecuteReader 
      If dr.HasRows() Then 
       cmbFailure.Items.Add(dr.GetString(0)) 
      End If 
      scmd.ExecuteNonQuery() 
      ' For more save for this sql will execute successfully, some of programmer will use Transaction with commit ' 
      ' Microsoft Link: https://msdn.microsoft.com/en-us/library/5ha4240h(v=vs.110).aspx ' 
     End Using 
     ' mycon.Close() ' 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) ' Exception Message ' 
     ' [Optional]Release object ' 
     ' mycon.Close() ' 
    End Try 
End Sub 

Und für Ihre Artikel mit es kann das Ergebnis abstürzen, wegen scmd war nicht das gleiche wie cmde.
Würden Sie bitte erklären [SCMD] ist für?

Verwandte Themen