web-dev-qa-db-fra.com

Une exception de type 'System.Data.SqlClient.SqlException' s'est produite dans System.Data.dll

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(); 
6
F 505

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 ExecuteScalarMSDN :

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.");
    }
  }
}
12
gzaxx

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.

6
Soner Gönül

Essaye ça

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

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);
}
0

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();
    }
0
saba