Je suis un débutant avec c #, quand j'exécute le code, ce message d'erreur se produit >>
"Une exception de type 'System.Data.SqlClient.SqlException' s'est produite dans System.Data.dll mais n'a pas été gérée dans le code utilisateur
Informations supplémentaires: syntaxe incorrecte près de '='. "
Et c'est le 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();
Il y a quelques problèmes avec votre code. Tout d'abord, je conseille d'utiliser des requêtes paramétrées afin d'éviter les attaques par injection SQL et les types de paramètres sont également découverts par le framework:
var cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID = @id", con);
cmd.Parameters.AddWithValue("@id", id.Text);
Deuxièmement, comme vous n'êtes intéressé que par une valeur renvoyée par une requête, il est préférable d'utiliser ExecuteScalar
MSDN :
var name = cmd.ExecuteScalar();
if (name != null)
{
position = name.ToString();
Response.Write("User Registration successful");
}
else
{
Console.WriteLine("No Employee found.");
}
La dernière chose à faire est de transformer SqlConnection
et SqlCommand
en using
afin que toutes les ressources utilisées par ceux-ci disposent:
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.");
}
}
}
Je pense que votre colonne EmpID
est string et que vous oubliez d'utiliser ' '
dans votre valeur.
Parce que lorsque vous écrivez EmpID=" + id.Text
, votre commande ressemble à EmpID = 12345
au lieu de EmpID = '12345'
Changez votre SqlCommand
en
SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID='" + id.Text +"'", con);
Ou, comme meilleur moyen, vous pouvez (et devriez) toujours utiliser parameterized queries
. Ce type de concaténation de chaînes est ouvert pour SQL Injection
attaques.
SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID = @id", con);
cmd.Parameters.AddWithValue("@id", id.Text);
Je pense que votre colonne EmpID
conserve les identifiants de vos employés. Son type doit donc être un type numérique au lieu d'un caractère.
Essaye ça
SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID=@id", con);
cmd.Parameters.AddWithValue("id", id.Text);
utilisez try-catch pour voir que de vraies erreurs se sont produites
try
{
//Your insert code here
}
catch (System.Data.SqlClient.SqlException sqlException)
{
System.Windows.Forms.MessageBox.Show(sqlException.Message);
}
Une exception non gérée du type 'System.Data.SqlClient.SqlException' s'est produite dans System.Data.dll
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();
}