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();
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.");
}
}
}
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.
Versuchen Sie dies
SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID=@id", con);
cmd.Parameters.AddWithValue("id", id.Text);