Temporäre tabellen als DataSource

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von queckjunior.

    Temporäre tabellen als DataSource

    Hallo,

    ich muß in einer echten Mehrbenutzerumgebung recht umfangreiche berechnende Abfragen auf den SQL Server loslassen. Erfahrungsgemäß läßt sich das am Besten mit Stored Procedures auf dem SQL server abrubeln, die wiederum mit temporären Tabellen arbeiten. Nun lassen sich aber temporäre Tabellen nicht so ohne weiteres als DataSource im VS 2010 handeln. Man bekommt sie eigentlich gar nicht auf dem normalen Weg eingebunden. Wenn ich versuche eine Prozedur, die eine temporäre Tabelle zurückgibt normal über ADO einzubinden geht gar nix.

    Bisher habe ich folgendes erreicht:

    Quellcode

    1. Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim sqlc As String = "pr_temp_table"
    3. 'diese Proc liefert die temporäre Tabelle
    4. Dim dp As New SqlDataAdapter
    5. Dim ds As New DataSetUsing cn As New SqlConnection("Server=OSSUS;Database=MailArchiv;Trusted_Connection=True")
    6.  dp.SelectCommand = New SqlCommand(sqlc, cn)dp.SelectCommand.CommandType = CommandType.StoredProcedure
    7. dp.Fill(ds)
    8. BindingSource1.DataSource = ds.Tables
    9. DataGridView1.DataSource = BindingSource1
    10. End Using
    11. End Sub


    Bisher bleibt aber mein DataGridView1 leer. Warum weiß ich nicht. Kann mir einer helfen?

    Danke!

    queckjunior schrieb:

    VB.NET-Quellcode

    1. BindingSource1.DataSource = ds.Tables
    du solltest schon an eine bestimmte Tabelle binden, nicht an alle gleichzeitig ;)

    probierma ds.Tables(0)

    aber vlt. verstehe ich auch falsch, weil ich nicht weiss, was ein "DataSetUsing" ist.

    vlt. VB-Tag richtig benutzen?
    doch - im post#1 im gezeigten QuellCode.

    wie gesagt: VB-Tag richtig benutzen

    zeigen sich denn wenigstens Spaltennamen?
    wie lauten die ColumnNames der Columns der ds.Tables(0)?

    vlt. musste auch AutogenrateColumns auf true setzen

    (auweh - 4 Gedanken in einem Post - da gehen sicher 3 von verloren)
    sorry das lag an dem Editor - jetzt richtig:



    Quellcode

    1. Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim sqlc As String = "pr_temp_table" 'diese Proc liefert die temporäre Tabelle
    2. Dim dp As New SqlDataAdapter
    3. Dim ds As New DataSet
    4. Using cn As New SqlConnection("Server=OSSUS;Database=MailArchiv;Trusted_Connection=True")  
    5. dp.SelectCommand = New SqlCommand(sqlc, cn)
    6. dp.SelectCommand.CommandType = CommandType.StoredProcedure
    7. dp.Fill(ds) BindingSource1.DataSource = ds.Tables
    8. DataGridView1.DataSource = BindingSource1
    9. End Using
    10. End Sub


    Deine Vorschläge:

    zeigen sich denn wenigstens Spaltennamen?
    nein es zeigt sich NICHTS

    wie lauten die ColumnNames der Columns der ds.Tables(0)?
    ne ganze Menge, Das DataGridView soll so an die 20 Spalten anzeigen.


    vlt. musste auch AutogenrateColumns auf true setzen
    ???? was ist das nie gehört.



    queckjunior

    queckjunior schrieb:

    sorry das lag an dem Editor - jetzt richtig:...
    also da habich ja annere Vorstellungen von "richtig":

    VB.NET-Quellcode

    1. Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim sqlc As String = "pr_temp_table" 'diese Proc liefert die temporäre Tabelle
    3. Dim dp As New SqlDataAdapter
    4. Dim ds As New DataSet
    5. Using cn As New SqlConnection("Server=OSSUS;Database=MailArchiv;Trusted_Connection=True")
    6. dp.SelectCommand = New SqlCommand(sqlc, cn)
    7. dp.SelectCommand.CommandType = CommandType.StoredProcedure
    8. dp.Fill(ds) BindingSource1.DataSource = ds.Tables
    9. DataGridView1.DataSource = BindingSource1
    10. End Using
    11. End Sub
    vlt wirklichmal VB-Tag richtig benutzen - ist nicht soo schwer.
    (Aber mir geht hartnäckige Lernresistenz auf die Nerven)


    wie lauten die ColumnNames der Columns der ds.Tables(0)?
    ne ganze Menge, Das DataGridView soll so an die 20 Spalten anzeigen.
    ich meinte, dass du das mal überprüfst. also wirklich mal ein paar zeilen Code schreiben, der die Columns dieser Table abruft, und ihre Namen ausgibt

    vlt. musste auch AutoGenerateColumns auf true setzen
    ???? was ist das nie gehört.
    Jede IDE hat ein sehr nützliches Tool, namens ObjectBrowser.
    Da gibts eine Suche-Funktion, und die könntestemal mit dem gegebenen Stichwort füttern.
    Ich habe ein Lösung gefunden fernab von o.g. Problemen. Ich habe in in meiner procs immer eine Tabelle #tabelle angelegt und ausgelesen. Das sind lokale temporäre Tabellen. Wen man in der Proc eine ##tabelle anlegt, also eine globale Temporäre Tabelle läßt sich diese auf einmal ganz einfach über ADO ansprechen. Richtig schick. Wichtig ist diese als letztes in der Proc mit drop table zu löschen.

    Also Thema durch !

    Mark B