web-dev-qa-db-fra.com

Erreur d'insertion de la base de données: "les données de chaîne ou binaires seraient tronquées"

Lorsque je me connecte, je stocke mon nom d'utilisateur dans la session. Mon exigence est que je souhaite stocker mon nom d'utilisateur dans ma base de données. Ici, je le stocke dans username1. Lorsque le nom d'utilisateur est entré, je peux l'imprimer en utilisant response.write() et il s'imprime parfaitement. Cependant, lorsque je le stocke dans la base de données, il génère cette erreur:

 ** sqlException a été gérée par le code utilisateur 
 et l'exception à cmd.ExecuteScalar (); 
 Les données de chaîne ou binaires seraient tronquées. 
 L'instruction a été terminée . ** 

Voici mon code ado.net:

using (SqlConnection con = 
    new SqlConnection("Data Source=.;database=testdb1;Integrated Security=SSPI")) {

    con.Open();
    //  SqlCommand cmd = new SqlCommand("delete from fileinfo where ID=" + Convert.ToInt32(Request.Params["one"]), con);                            

    string uname = (string) Session["fname"].ToString() + " " + Session["lname"].ToString(); //Session["fname"].ToString()+" "+Session["lname"].ToString();

    // Response.Write(uname);
    // uname = "sri hari";
    uname = uname + " ";
    string uname1 = uname;
    uname = uname.Trim();
    SqlCommand cmd = new SqlCommand("insert into qry_details values('" + txt_query_name.Text + "','pending for approval','" + txt_query_description.Text + "','" + DateTime.Now.ToString("yyyy-MM-dd") + "','" + qry + "','" + uname1 + "')", con);
    cmd.ExecuteScalar();
}
13
srihari

vérifier la longueur de la table qry_details et voir si elle est plus petite que la chaîne que vous envoyez à la base de données?

fondamentalement, l'exception indique que vous essayez quelque chose de plus grand que la longueur de la colonne.

24
Aneef

Je vous recommanderais d'utiliser une requête paramétrée. Votre code est désormais vulnérable à l'injection SQL. Vous devez également utiliser la méthode ExecuteNonQuery sur la commande SQL au lieu de ExecuteScalar lors de l'insertion de valeurs dans la base de données:

var connectionString = "Data Source=.;database=testdb1;Integrated Security=SSPI";
using (SqlConnection con = new SqlConnection(connectionString))
using (SqlCommand cmd = con.CreateCommand())
{
    con.Open();
    cmd.CommandText = "INSERT INTO qry_details VALUES (@query_name, 'pending for approval', @query_description, @date, @qry, @username)";
    cmd.Parameters.AddWithValue("@query_name", txt_query_name.Text);
    cmd.Parameters.AddWithValue("@query_description", txt_query_description.Text);
    cmd.Parameters.AddWithValue("@date", DateTime.Now);
    cmd.Parameters.AddWithValue("@qry", qry);
    cmd.Parameters.AddWithValue("@username", uname1);
    cmd.ExecuteNonQuery();
}
9
Darin Dimitrov

Cette erreur se produit principalement lorsque la valeur d'insertion est supérieure à la largeur de champ définie dans le tableau sur SQL Server.

Vérifiez si vous insérez la date et l'heure à l'aide de DateTime. Maintenant, c # fuction, votre table doit être de type DateTime. pas la date ou l'heure seulement.

1
Akhtar ali