Eine Ausnahme vom Typ 'System.Data.SqlClient.SqlException' ist in System.Data.dll aufgetreten

I'm ein Anfänger mit c#, wenn ich den Code ausführen diese Fehlermeldung auftritt>>

"Eine Ausnahme vom Typ 'System.Data.SqlClient.SqlException' trat in System.Data.dll auf, wurde aber im Benutzercode nicht behandelt

Zusätzliche Informationen: Falsche Syntax bei '='. "

Und das ist der Code!!

string position;

SqlConnection con = new SqlConnection("server=free-pc\\FATMAH; Integrated Security=True; database=Workflow; ");
con.Open();
SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID=" + id.Text, con);

SqlDataReader Read = cmd.ExecuteReader();

if (Read.Read()==true)
{
    position = Read[0].ToString();
    Response.Write("User Registration successful");
}
else
{
    Console.WriteLine("No Employee found.");
}

Read.Close(); 
Lösung

Es gibt einige Probleme mit Ihrem Code. Zunächst empfehle ich, parametrisierte Abfragen zu verwenden, damit Sie SQL-Injection-Angriffe vermeiden und auch Parametertypen vom Framework erkannt werden:

var cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID = @id", con);
cmd.Parameters.AddWithValue("@id", id.Text);

Zweitens, da Sie nur an einem von der Abfrage zurückgegebenen Wert interessiert sind, ist es besser, ExecuteScalar MSDN zu verwenden:

var name = cmd.ExecuteScalar();

if (name != null)
{
   position = name.ToString();
   Response.Write("User Registration successful");
}
else
{
    Console.WriteLine("No Employee found.");
}

Der letzte Punkt ist, SqlConnection und SqlCommand in using zu verpacken, so dass alle Ressourcen, die von diesen verwendet werden, entsorgt werden:

string position;

using (SqlConnection con = new SqlConnection("server=free-pc\\FATMAH; Integrated Security=True; database=Workflow; "))
{
  con.Open();

  using (var cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID = @id", con))
  {
    cmd.Parameters.AddWithValue("@id", id.Text);

    var name = cmd.ExecuteScalar();

    if (name != null)
    {
       position = name.ToString();
       Response.Write("User Registration successful");
    }
    else
    {
        Console.WriteLine("No Employee found.");
    }
  }
}
Kommentare (1)

Ich denke, Ihre Spalte "EmpID" ist ein String und Sie haben vergessen, "' '` in Ihrem Wert zu verwenden.

Denn wenn Sie EmpID=" + id.Text schreiben, sieht Ihr Befehl aus wie EmpID = 12345 statt EmpID = '12345'

Ändern Sie Ihren SqlCommand in

SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID='" + id.Text +"'", con);

Oder Sie können (und sollten) immer parametrisierte Abfragen verwenden. Diese Art von String-Verkettungen sind offen für SQL Injection Angriffe.

SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID = @id", con);
cmd.Parameters.AddWithValue("@id", id.Text);

Ich denke, dass Ihre EmpID-Spalte Ihre Mitarbeiter-ID's speichert, also sollte ihr Typ ein numerischer Typ statt eines Zeichens sein.

Kommentare (0)

Versuchen Sie dies

SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID=@id", con);
cmd.Parameters.AddWithValue("id", id.Text);
Kommentare (0)