Benutzer mit den meisten Antworten
Query auf eine SQL Express Datenbank mit FehlerSklarvariable definieren

Frage
-
Hallo ich versuche ein Login Bildschirm als Windowsformsanwendung zu erstellen und möchte eine Parametrisierte Abfrage zu meiner Datenbank für den Benutzer, Passwort und einen Wahr oder Falsch wert aus führen und bekommen ein Fehlermeldung @Benutzer Skalarvariable muss definiert werden. Irgendwie finde ich den Fehler nicht den ich habe die Variablen vorher definiert.
wer kann mir da helfen ich benutze folgenden Code
Definiert als Klasse: Public Sub ParamQuery(Query As String, Optional Collate As Collation = Collation.None) Try ODBCcon.Open() If Collate = Collation.CaseSensitive Then Query = Query & " COLLATE SQL_Latin1_General_CP1_CS_AS " ODBCcmd = New OdbcCommand(Query, ODBCcon) For Each p As OdbcParameter In ODBCParam MsgBox(p.ParameterName & ":" & p.Value) ODBCcmd.Parameters.Add(p) ODBCcmd.Parameters(p.ParameterName).Value = p.Value Next ODBCDA = New OdbcDataAdapter(ODBCcmd) ODBCDataSet = New DataSet ODBCDA.Fill(ODBCDataSet) MsgBox(Query & vbCrLf & ODBCDataSet.Tables(0).Rows(0).Item(0), MsgBoxStyle.OkOnly, "Erfolgreich") ODBCcon.Close() Catch ex As Exception If ODBCcon.State = ConnectionState.Open Then ODBCcon.Close() MsgBox("Abfrage fehlgeschlagen : " & ex.Message) MsgBox(Query) End Try End Sub Public Sub AddParam(Name As String, Value As Object, Optional DataType As DbType = DbType.String) Dim newParam As New OdbcParameter With {.ParameterName = Name, .Value = Value, .DbType = DataType} ODBCParam.Add(newParam) End Sub 'Parameter leeren Public Sub FlushParams() ODBCParam.Clear() End Sub Public Enum Collation None CaseSensitive End Enum in der Form: Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click ODBC.AddParam("@Benutzer", txtBenutzername.Text, SqlDbType.VarChar) ODBC.AddParam("@Passwort", txtPasswort.Text, DbType.String) ODBC.AddParam("@Lagerist", True, DbType.Boolean) ODBC.ParamQuery("SELECT Name FROM Mitarbeiter WHERE Name = @Benutzer " & "AND PIN = @Passwort AND Lagerist = @Lagerist ", ODBCControl.Collation.CaseSensitive) frmMenü.Show() Me.Hide() End Sub
Danke
Remo
Antworten
-
ODBC.ParamQuery("SELECT Name FROM Mitarbeiter WHERE Name = @Benutzer " & "AND PIN = @Passwort AND Lagerist = @Lagerist ", ODBCControl.Collation.CaseSensitive)
Hallo Remo,
warum verwendest Du den die ODBC Klassen und nicht System.Data.SqlClient Namespace?
ODBC unterstützt meines Wissens keine benannten Parameter, sondern sogenannte "positional Parameter", siehe Configuring Parameters and Parameter Data Types => Working with Parameter Placeholders => System.Data.Odbc => Uses positional parameter markers indicated by a question mark (?).
Deswegen kommt eine Fehlermeldung wegen "Skalarvariable" und nicht wegen fehlendem Parameter. Die Abfrage muss also so lauten:
ODBC.ParamQuery("SELECT Name FROM Mitarbeiter WHERE Name = ? " & "AND PIN = ? AND Lagerist = ? ", ODBCControl.Collation.CaseSensitive)
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert RemoM Donnerstag, 10. März 2016 19:51
-
Hallo Olaf ,
ich hatte mal mit ner ODBC Verbindung angefangen. Da ich noch nicht genau weiß ob das MobileBarcodeerfassungsgerät mit dem SQL Verbindungsstring klarkommt.
Ich weiß nur das die ODBC Verbindung funktioniert.
Vielen Dank für Deine Hilfe hab den Code so umgebaut und nun funktuioniert die Abfrage.
Remo Maurer
- Als Antwort markiert RemoM Donnerstag, 10. März 2016 19:51
Alle Antworten
-
ODBC.ParamQuery("SELECT Name FROM Mitarbeiter WHERE Name = @Benutzer " & "AND PIN = @Passwort AND Lagerist = @Lagerist ", ODBCControl.Collation.CaseSensitive)
Hallo Remo,
warum verwendest Du den die ODBC Klassen und nicht System.Data.SqlClient Namespace?
ODBC unterstützt meines Wissens keine benannten Parameter, sondern sogenannte "positional Parameter", siehe Configuring Parameters and Parameter Data Types => Working with Parameter Placeholders => System.Data.Odbc => Uses positional parameter markers indicated by a question mark (?).
Deswegen kommt eine Fehlermeldung wegen "Skalarvariable" und nicht wegen fehlendem Parameter. Die Abfrage muss also so lauten:
ODBC.ParamQuery("SELECT Name FROM Mitarbeiter WHERE Name = ? " & "AND PIN = ? AND Lagerist = ? ", ODBCControl.Collation.CaseSensitive)
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert RemoM Donnerstag, 10. März 2016 19:51
-
Hallo Olaf ,
ich hatte mal mit ner ODBC Verbindung angefangen. Da ich noch nicht genau weiß ob das MobileBarcodeerfassungsgerät mit dem SQL Verbindungsstring klarkommt.
Ich weiß nur das die ODBC Verbindung funktioniert.
Vielen Dank für Deine Hilfe hab den Code so umgebaut und nun funktuioniert die Abfrage.
Remo Maurer
- Als Antwort markiert RemoM Donnerstag, 10. März 2016 19:51