sql SELECT spalte per column-index?

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von cyver89.

    ich habe eine mssql datenbank. in der datenbank habe ich eine tabelle "pk_tabelle", "spalte1", "spalte2"... usw.
    normalerweise kenne ich den select befehl so "SELECT spalte1 FROM tabelle"

    und im mssql manager selbst habe ich keine id gefunden ;/

    ich würde gerne "SELECT columnindex(1) FROM tabelle" schreiben. columnindex soll dann der index der spalte als integer sein.
    ich verstehe den sinn nicht aber egal

    du weist wie deine datenbanktabelle aufgebaut ist
    du weist welche spalte du ansprechen willst (1) warum gehst du dann nicht her und wandelst
    die spaltenid um ?



    z.b. ( schlechtes bsp aber besser wie nix grad kein kopf für vb)

    VB.NET-Quellcode

    1. dim alt as integer ="1" ' nur die id deines columnindex(1)
    2. Select Case alt
    3. Case 0
    4. "SELECT spalte0 FROM tabelle"
    5. Case 1
    6. "SELECT spalte1 FROM tabelle"
    7. Case 2
    8. "SELECT spalte2 FROM tabelle"
    9. Case 3
    10. "SELECT spalte3 FROM tabelle"
    11. Case 4
    12. "SELECT spalte4 FROM tabelle"
    13. Case Else
    14. 'fehlermeldung
    15. End Select
    ja die variante funktioniert, dankeschön dafür^^

    der sinn der sache ist, dass ich ein datagridview habe, und die daten aus dem grid sollen in einer mssql datenbanktabelle geupdatet werden

    dazu werden alle zeilen der einen spalte in ein listarray geschrieben.

    vorteilhaft wäre, wenn ich nach jedem durchgang einfach den index der sqldatenbank columns einfach um 1 erhöhen könnte, und somit bequem die nächste spalte anzusprechen um weiterhin zu updaten.


    VB.NET-Quellcode

    1. Public Function update(ByVal wlist As List(Of String), ByVal spalt As integer)
    2. index = 0
    3. lcount = wlist.Count
    4. verbindung.Open()
    5. Do While index < lcount
    6. befehl = verbindung.CreateCommand
    7. befehl.CommandText = "UPDATE boxen SET " + spalt + " = '" + wlist.Item(index) + "'"
    8. befehl.ExecuteNonQuery()
    9. index = index + 1
    10. Loop
    11. verbindung.Close()
    12. Return 0
    13. End Function


    und die listarray beschreibe ich so:

    VB.NET-Quellcode

    1. rowc = DataGridView1.Rows.Count
    2. columncount = DataGridView1.ColumnCount
    3. column = 0
    4. Do While column < columncount
    5. index = 0
    6. werte.Clear()
    7. Do While index < rowc
    8. werte.Add(Convert.ToString(DataGridView1.Item(column, index).Value))
    9. index = index + 1
    10. Loop
    11. verb.sichtupdate(werte, column) 'das ist die oben geschriebene function. "column" soll hierbei der spaltenindex der datenbanktabelle ind mssql sein
    12. column = column + 1
    13. Loop

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „cyver89“ ()

    @ cyver89

    Wenn Du so direkt den händischen Weg gehen willst, dann würde ich Dir empfehlen gleich direkt auf eine OCDB-Connection umzusteigen und mit ADODB.Recordsets zu arbeiten.

    Dann kannst Du das nämlich genauso machen und Du hast den Vorteil das es gegenüber Deiner Variante um Faktor x schneller ist.

    Jedesmal pro Field ein SQL-Statement abzusetzen ist nicht wirklich performant und eigentlich auch nicht sinnvoll. Wenn schon per SQL-Statement dann bitte gleich den kompletten Datensatz übertragen. Kannst ja in einem UPDATE-Statement beliebig viele Fields updaten.

    Wenn Du mit OleDB arbeiten willst, dann solltest Du Dich mal ernsthaft mit dem Thema DataBinding auseinander setzen. Da bindest Du gleiche das Table aus der DB an das DataGridViews und die Änderungen werden direkt in die DB übernommen.

    Oder kurz: Dein Ansatz ist der falsche Weg.

    Gruß

    Rainer