Announcement

Collapse
No announcement yet.

Parametrisierte Abfrage eines SQL-Server mit OLEDB

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

  • Parametrisierte Abfrage eines SQL-Server mit OLEDB

    Ich verwende in meinem Programm einen Schalter, mit dem ich zw. SQL-Server und Access umschalten kann. Zum Anmelden wird eine parametrisierte Abfrage ausgeführt. In Access ist das kein Problem.

    <pre>
    int i=0;
    OleDbConnection conn = new OleDbConnection(util.GetConnString());
    string sql = "SELECT ID FROM [Mitarbeiter] WHERE Benutzername=@BName AND Passwort=@BPass";
    try
    {
    OleDbCommand cmd = new OleDbCommand(sql, conn);
    cmd.Parameters.Add("@BName", txtName.Text);
    cmd.Parameters.Add("@BPass", txtPasswort.Text);
    conn.Open();
    i = Convert.ToInt16(cmd.ExecuteScalar());
    if (i!=0)
    {
    cmd.CommandText = "SELECT Benutzerstatus FROM Mitarbeiter WHERE ID=" + i.ToString();
    Session.Add("Userstatus", cmd.ExecuteScalar().ToString());
    }
    }
    catch (OleDbException ex)
    {
    Label1.Text = ex.Message;
    lblInfo.Text = "Sie können nicht am System angemeldet werden.<br>Bitte benachrichtigen sie ihren Administrator!<br>" + ex.Message;;
    }
    </pre>

    Wenn die Abfrage mit SQL-Server ausgeführt wird, kommt eine Fehlermeldung:
    <pre>Code:
    Die Variable '@BName' muss deklariert werden. </pre>

    Was kann ich machen, um die Parameter zu verwenden???

    (Ich habe in dem ganzen Programm solche Agfragen eingebaut. Wenn alles umgeschrieben werden müsste, wäre das ein zu großer Aufwand!)

    <hr>
    Andreas

  • #2
    <p>In Transact-SQL vom SQL Server müssen die Parameter deklariert werden. Access ist hier weniger restriktiv. Deine parametrisierte Abfrage müsste vor dem Select-Statement um die Deklaration der Variablen ergänzt werden, etwa "Declare @BName"<br>.
    Wenn sowohl Access als auch SQL Server unterstützt werden soll, dann ist es nicht sinnvoll die Abfragen so einzubauen. Der bessere Weg ist Stored Procedures zu definieren. Diese sind dann identisch aufrufbar und gleichen Unterschiede aus.</p>

    <p>Gruss<br>Gerd</p&gt

    Comment


    • #3
      Ich habe mich mal schlau gemacht. Wenn ich mit dem OLEDB-Datenprovider auf den SQL Server zugreife, kann ich nur dem Parametermarker <b><i>?</i></b> in Abfragen verwenden. Mit dem SQL-Datenprovider ist das ganze anders gelöst.<br>
      Weil der SQL Server intern keine Parametermarker benutzt werden sie auch nicht unterstützt.

      Da muss man erstmal drauf kommen.

      Schöne Woche noch...
      <hr size=1>
      Andreas Gräf

      Comment

      Working...
      X