Table Adapter Query

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von mox.

    Table Adapter Query

    Hallo Freunde,


    VB.NET-Quellcode

    1. Dim dgv1id As Integer = CInt(ArtikelDataGridView.CurrentRow.Cells(0).Value)
    2. Dim sqlconn As New SqlConnection("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=D:\name\software\vs2015\adapterz\adapterz\Database1.mdf;Integrated Security=True")
    3. Dim dtadapter As New SqlDataAdapter("SELECT Zutatname From Zutaten INNER JOIN Combine ON Zutaten.Id = Combine.ZutatID Where Combine.ArtikelID=" & dgv1id, sqlconn)
    4. Dim dt As New DataTable
    5. dtadapter.Fill(dt)
    6. ListBox1.DataSource = dt
    7. ListBox1.DisplayMember = "Zutatname"


    ich würde das gerne im Dataset Designer machen ohne die direkte Db Anfrage, also quasi das alles umsetzen. Habe im Tableadapter schon eine neue Sql Abfrage erstellt und das Ergebnis der Abfrage ist genau wie die der obengenannten MEthode.
    Jetz weiss ich aber leider nicht genau wie ich das Ergebniss in meine Listbox1 übertrage.
    MFg
    Hier könnte meine Signatur stehen.
    mir scheint da was faul, weil eiglich dürfte es nicht klappen.
    in post #1 wird eine neue Datatable befüllt und an die listbox gehängt - das könnte gehen.
    Dafür kann man derlei Daten aber nicht mehr rückspeichern, oder vlt. doch, aber was ist dann mit der Dataset-Tabelle - wird die dann nicht mehr rückgespeichert?

    In post#2 hingegen wird die Dataset-Tabelle an die listbox gehängt. Dabei dürfte die Abspeicherei und auch die Relationen konsistent bleiben, aber mit dem Code aus post#1 geht das nicht zusammen, der befüllt ja eine andere DataTable.
    Also ich möchte so wenig code wie möglich deshalb wollte ich nicht die Db direkte abfrage sondern bequem über den dataset wizard > table adapter > neue sqlabfrage.
    so sieht das ganze dann aus:

    VB.NET-Quellcode

    1. Dim dgv1id As Integer = CInt(ArtikelDataGridView.CurrentRow.Cells(0).Value)
    2. ZutatenTableAdapter.FillBy(Database1DataSet.Zutaten, dgv1id)
    3. ListBox1.DataSource = Database1DataSet.Zutaten
    4. ListBox1.DisplayMember = "Zutatname"


    Es klappt alles super, nur leider wird dabei auch meine ZutatenDgv verändert also das ergebniss der sql abfrage wird in der zutatendgv dargestellt, für mich ist aber nur wichtig dass er mir nur da ergebniss der sql abfrage gibt und die dgv unversert bleibt.
    Hier könnte meine Signatur stehen.
    na, dann musste den Kram doch in eine getrennte DataTable laden.
    Aber meist hat das keinen Sinn, denn eine getrennte DataTable hat ja den Bezug zum Dataset verloren.

    ich vermute, was du willst , könntest du viel besser mit einem einfachen BindingSource-Filter erreichen. Aber das vermute ich nur.
    Vlt. erzählst du mal, was du erreichen willst?
    So Freunde, erledigt.

    Ich musste die Getdataby Methode des Tableadapters benutzen , da sie mir die werte der Sql Abfrage zurückgibt OHNE die dgv zu verändern, die Fillby methode war falsch.
    Die Getdataby Methode erstellt selbstständig eine datatable wo das Resultat der Sql abfrage eingefügt wird, ohen die dgv zu verändern.

    VB.NET-Quellcode

    1. ListBox1.DataSource = ZutatenTableAdapter.GetDataBy(dgv1id) 'dgv1id ist der parameter, der in der sqlabfrage erstellt wird.
    2. ListBox1.DisplayMember = "Zutatname"
    Hier könnte meine Signatur stehen.