Ich bin ein Anfänger mit c #, wenn ich den Code ausführt, tritt diese Fehlermeldung auf >>
Msgstr "Eine Ausnahme des Typs 'System.Data.SqlClient.SqlException' trat in System.Data.dll auf, wurde jedoch nicht im Benutzercode behandelt
Zusätzliche Informationen: Falsche Syntax in der Nähe von '='. "
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. Zuerst empfehle ich die Verwendung parametrisierter Abfragen, um SQL-Injection-Angriffe zu vermeiden und auch Parametertypen werden vom Framework erkannt:
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.");
}
Das letzte ist, SqlConnection
und SqlCommand
in using
zu packen, so dass alle Ressourcen, die von diesen genutzt werden, zur Verfügung stehen würden:
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 EmpID
-Spalte ist string und Sie vergessen, ' '
in Ihrem Wert zu verwenden.
Wenn Sie EmpID=" + id.Text
schreiben, sieht Ihr Befehl wie EmpID = 12345
anstelle von EmpID = '12345'
aus.
Ändern Sie Ihre SqlCommand
in
SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID='" + id.Text +"'", con);
Oder als bessere Möglichkeit können Sie (/ sollten) immer parameterized queries
verwenden. Diese Art von String-Verkettungen ist für Angriffe mit SQL Injection
offen.
SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID = @id", con);
cmd.Parameters.AddWithValue("@id", id.Text);
Ich denke, Ihre EmpID
-Spalte behält Ihre Mitarbeiter-IDs bei, daher sollte der Typ einen numerischen Typ anstelle des Charakters haben.
Versuche dies
SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE [email protected]", con);
cmd.Parameters.AddWithValue("id", id.Text);
verwenden Sie try-catch, um einen echten Fehler zu sehen
try
{
//Your insert code here
}
catch (System.Data.SqlClient.SqlException sqlException)
{
System.Windows.Forms.MessageBox.Show(sqlException.Message);
}
Eine nicht behandelte Ausnahme des Typs 'System.Data.SqlClient.SqlException' ist in System.Data.dll aufgetreten
private const string strconneciton = "Data Source=.;Initial Catalog=Employees;Integrated Security=True";
SqlConnection con = new SqlConnection(strconneciton);
private void button1_Click(object sender, EventArgs e)
{
con.Open();
SqlCommand cmd = new SqlCommand("insert into EmployeeData (Name,S/O,Address,Phone,CellNo,CNICNO,LicenseNo,LicenseDistrict,LicenseValidPhoto,ReferenceName,ReferenceContactNo) values ( '" + textName.Text + "','" + textSO.Text + "','" + textAddress.Text + "','" + textPhone.Text + "','" + textCell.Text + "','" + textCNIC.Text + "','" + textLicenseNo.Text + "','" + textLicenseDistrict.Text + "','" + textLicensePhoto.Text + "','" + textReferenceName.Text + "','" + textContact.Text + "' )", con);
cmd.ExecuteNonQuery();
con.Close();
}