Announcement

Collapse
No announcement yet.

Zusammenhängende SQL-Statements machen Probleme!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zusammenhängende SQL-Statements machen Probleme!

    [EDIT] Zusammenhängende SQL-Statements machen Probleme! (Habe den Titel etwas verfehlt)

    Hallo Leute,

    ich habe gegoogelt und gegoogelt aber finde nirgends eine Antwort auf meine Fragen

    Also in der Schule mache ich ein Projekt mit MSSQL-Datenbanken! Whatever, ich habe viele SQL-Dateien die Daten erzeugen. Meine Aufgabe ist es, diese SQL-Statements in vb.net zu importieren!

    Ich habe es daweil so gelöst:

    Code:
    	'Connect to Database
            Dim SqlConnection As New System.Data.SqlClient.SqlConnection()
            SqlConnection.ConnectionString = _
            "server="servername;database=dbname;uid=username;pwd=password"
    
            Try
                SqlConnection.Open()
            Catch ex As Exception
                MessageBox.Show(ex.Message, _
                    "Databaseconnect failed!")
            End Try
    
    	1. Sql
            SqlCommand.Connection = SqlConnection
            SqlCommand.CommandText = "SELECT FROM bla bla"
            SqlDataAdapter.SelectCommand = SqlCommand
    
    	'2. Sql
            SqlCommand.CommandText = "SELECT FROM bla bla"
            SqlDataAdapter.SelectCommand = SqlCommand
    
    ' usw....
    
    	SqlConnection.Close()
    Doch leider habe ich das Problem, dass z.B. beim declarieren von Variablen es beim nächsten SQL Statement dann die Variable nicht mehr erkennt!

    Z.B. ich deklariere die variable letztesdatum und hol mir mittels eienr select abfrage dann das letzte datum und weise dieser variable zu. anschließend will ich dann wieder eine sql abfrage starten die die variable in der where-clausel beinhält doch dort erkennt die abfrage sie nicht mehr!
    Wenn ich die Abfragen genauso in SQL-Server ausführe funktionieren sie problemlos! Also an Sql scheitert es nicht!

    Ich befürchte, dass der Code oben etwas umgeschrieben werden muss. Kann mir evtl. einer helfen?

    Und zu meiner zweiten Frage: ist es möglich die SQL-Dateien direkt auszuführen? Also von vb.net aus und anschließend mit den Daten weiterarbeiten? Denke eher nicht oder?

    LG
    R159
    Zuletzt editiert von R159; 22.02.2010, 01:01.

  • #2
    Hallo,

    ich habe das Thema verschoben: Datenbank-Probleme gehören zum Unterforum ADO.NET. Außerdem bitte ich dich, etwas genauer zu formulieren, damit es nicht zu Missverständnissen kommen kann.

    1. "ich habe viele SQL-Dateien die Daten erzeugen": Hast du eine oder mehrere Datenbanken mit vielen Tabellen, die Daten enthalten? Oder meinst du SQL-Skripte mit INSERT-Befehlen?

    2. "diese SQL-Statements in vb.net zu importieren!": Normalerweise würde ich sagen, schreibe sie per Copy&Paste in den Quelltext. Aber das meinst du vermutlich nicht, sondern...?

    3. Die konkreten Fragen beziehen sich auf "Variable deklarieren" und "SELECT-Abfragen", aber in dem Code kann ich nichts von Variablen erkennen. Und was hat das mit SQL-Dateien (Punkt 1) zu tun?

    4. "ist es möglich die SQL-Dateien direkt auszuführen?" Meinst du, dass das SQL-Skript per DbCommand ausgeführt werden soll? Wenn du das meinst: ausprobieren (bei MS-SQL geht es, bei anderen DBs nicht).

    Angesichts dieser Unklarheiten geht meine Antwort etwas ins Blaue. Ich gehe von folgender Problemstellung aus: Hole per SELECT Daten aus einer Datenbank-Tabelle; die WHERE-Einschränkung soll variabel gehalten werden und erst zur Laufzeit mit einem bestimmten Wert versehen werden. Lösungsverfahren:
    1. Erstelle eine separate Methode GetDataByDate mit einem DateTime-Parameter. Ein weiterer Parameter ist die DataTable, in die das Ergebnis geschrieben wird.
    2. In diese Methode kommt die gesamte Abfrage hinein: DbConnection, DbCommand, DbDataAdapter.
    3. Beim DbCommand wird der Wert des Parameters zugewiesen.
    4. Die Abfrage wird direkt in die DataTable hineingeschrieben.


    Es gibt noch andere Verfahren, z.B. kann der SelectCommand oder sein Text ebenfalls als Parameter übergeben werden; die DataTable kann neu erstellt und als Rückgabe-Parameter verwendet werden usw. Aber das Prinzip geht so.
    Code:
    Sub GetDataByDate( date As DateTime ByValue, table As DataTable ByRef )
       Using conn As New DbConnection(connString)
          Using cmd As New DbCommand(conn)
             cmd.CommandText = "SELECT * FROM bla WHERE LastWriteDate = @"Date"
             cmd.Parameters.AddWithValue("@Date", date)
             Using da As New DbDataAdapter(conn)
                 da.SelectCommand = cmd
                 table.Clear()
                 da.Fill(table)
             End Using
          End Using
       End Using
    End Sub
    (Das ist kein VB-Code, weil ich fast ausschließlich C# nutze, sondern es ist als Pseudo-Code zu lesen.)

    Zusatzhinweise: Eine DbConnection soll immer nur solange geöffnet sein und existieren, wie sie konkret benötigt wird. Das wird mit Using-Block gesichert. Wenn ich von Db-Klassen spreche, sind immer die passenden Klassen des Providers zu verwenden, bei dir also die Sql-Klassen. Der Fill-Befehl öffnet und schließt die Verbindung in der Regel automatisch.

    Gruß Jürgen

    PS. Bitte beachte künftig auch den Hinweis zur Rechtschreibung unter Hinweise für die Fragen.

    PS 2. Ich halte es für riskant, für Variablen denselben Namen wie den einer Klasse zu verwenden.

    Comment

    Working...
    X