Announcement

Collapse
No announcement yet.

Incorrect syntax near the keyword 'USER'. ?

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

  • Incorrect syntax near the keyword 'USER'. ?

    Dim strConnect As String = "User ID=" + strUser + ";Password=" + strPass + ";Initial Catalog=testdb;Data Source=DBSERVER1"
    Dim conn As New SqlConnection(strConnect)
    Dim myReaderUserName As SqlDataReader()
    Dim mySqlCommandUserName As SqlCommand
    mySqlCommandUserName = New SqlCommand("Select USER_PASS from USER where USER_NAME='" + strUser + "'", conn)

    Try
    conn.Open()
    myReaderUserName = mySqlCommandUserName.ExecuteScalar
    Me.UserName.Text = myReaderUserName.GetValue("USER_PASS")
    Catch e As Exception
    Response.Write(e.Message)
    End Try

    Beim ausführen konnte der folgende Fehlermeldung:
    Incorrect syntax near the keyword 'USER'.

  • #2
    Hallo,

    >..Incorrect syntax near the keyword 'USER'...

    wie die Fehlermeldung (die nicht von .NET kommt, sondern vom MS SQL Server) schon sagt ist die Zeichenkette <b>USER</b> ein vom SQL-Standard reserviertes Schlüsselwort, das nicht als Name für eigene Objekte (Tabellen oder Spalten) verwendet werden sollte. Um diesen Namen trotzdem nutzen zu können, muss der Tabellenamen in eckige Klammern gekapselt werden, wie das folgende Beispiel demonstriert:
    <pre>
    USE tempdb
    GO

    CREATE TABLE [USER] (
    UserName VARCHAR(10) PRIMARY KEY)

    INSERT INTO [USER] VALUES (USER)

    SELECT * FROM [USER]
    </pre>
    P.S: Ich würde den Namen der Tabelle ändern, da die geklammerte Fassung für Dritte nicht sofort ersichtlich ist

    Comment


    • #3
      Ok, das war es. Ich habe einfach die Tabellennamen und Spaltennamen geändert. Jetzt bekomme ich die folgende Fehlermeldung:

      Specified cast is not valid.

      Ich habe allgemein das Problem, das ich von einem Datensatz nur ein Wert an ein Textbox oder Label geben möchte. Ich verstehe noch nicht ganz die Vorgehensweise. Kann mir jemand da helfen?

      Danke und Gruss
      Sai

      Comment


      • #4
        Hallo,

        werden die Daten über den DataReader ausgelesen, stehen je Datentyp spezielle Methoden (GetString, GetDateTime etc.) zur Verfügung. Beim direkte Zugriff über <b>ExecuteScalar</b> muss man sich allerdings selbst um die Anpassung kümmern - was im Fall von VB.NET über <b>CType</b> erledigt wird, wie das folgende Beispiel demonstriert:
        <pre>
        Dim strConn As String = "data source=localhost;initial catalog=Northwind;integrated security=SSPI;"
        Dim aCon As New SqlConnection(strConn)
        Dim aCmd As New SqlCommand("SELECT ShipName, OrderDate FROM Orders WHERE CustomerID = 'FRANK'", aCon)

        Dim sShipName As String
        aCon.Open()
        sShipName = CType(aCmd.ExecuteScalar(), String)
        aCon.Close()

        MessageBox.Show(sShipName)
        </pre>
        Das Beispiel mit dem <b>DataReader</b> sieht wie folgt aus, hier sorgt der Zugriff über <b>GetString</b> dafür, dass .NET implizit hinter den Kulissen die notwendigen Typumwandlung selbst vornimmt:
        <pre>
        Dim strConn As String = "data source=localhost;initial catalog=Northwind;integrated security=SSPI;"
        Dim aCon As New SqlConnection(strConn)
        Dim aCmd As New SqlCommand("SELECT ShipName, OrderDate FROM Orders WHERE CustomerID = 'FRANK'", aCon)

        Dim sShipName As String
        aCon.Open()
        Dim aDR As SqlDataReader = aCmd.ExecuteReader()
        aDR.Read()
        sShipName = aDR.GetString(0)
        aDR.Close()
        aCon.Close()

        MessageBox.Show(sShipName)
        </pre>
        &#10

        Comment


        • #5
          Hallo Andreas,

          ok, läuft so wie du es angegeben hast! Danke!

          Gruss
          Sai

          Comment

          Working...
          X