2016-10-01 4 views
0

Je suis nouveau sur .Net. Je viens de commencer à l'apprendre. Je suis tombé en erreur, où il affiche que "SqlException n'a pas été gérée par le code utilisateur."SqlException n'a pas été gérée par le code utilisateur de cmd.ExecuteNonQuery()

protected void Button1_Click(object sender, EventArgs e) 
{ 
    SqlCommand cmd = new SqlCommand(); 
    cmd.CommandText = "insert tbemp (@eno, @ename, @es, @eadd)"; 
    cmd.Connection = con; 
    cmd.Parameters.Add("@eno",SqlDbType.Int).Value = Convert.ToInt32(TextBox1.Text); 
    cmd.Parameters.Add("@ename", SqlDbType.VarChar,50).Value = TextBox2.Text; 
    cmd.Parameters.Add("@es", SqlDbType.VarChar, 50).Value = TextBox3.Text; 
    cmd.Parameters.Add("@eadd", SqlDbType.VarChar, 50).Value = TextBox4.Text; 
    cmd.ExecuteNonQuery(); 
    cmd.Dispose(); 
    TextBox1.Text = String.Empty; 
    TextBox2.Text = String.Empty; 
    TextBox3.Text = String.Empty; 
    TextBox4.Text = String.Empty; 
    TextBox1.Focus(); 
} 
+5

https://www.tutorialspoint.com/sql/sql-insert-query.htm SQL a la structure, la syntaxe et les mots-clés. – Plutonix

+2

Lire [demander]. L'exception a un message très utile, indiquant ce qui ne va pas avec votre requête. En utilisant ce message, vous pouvez faire des recherches, ce qui vous permet de trouver une solution. – CodeCaster

Répondre

0

Votre insertion DML n'est pas correcte. Ce devrait être: insert into tbemp values(@eno, @ename, @es, @eadd). Je voudrais également être très prudent avec vos limites de taille de 50 caractères et une affectation directe des valeurs TextBox. Ce pourrait être une autre source d'exception.

0

La requête SQL que vous définissez à cmd.CommandText n'est pas valide SQL. En supposant tbemp est le nom de votre table, votre requête devrait ressembler à:

insert into tbemp values (@eno, @ename, @es, @eadd) 
+0

Je pense que nous pouvons ajouter des valeurs sans utiliser dans, si nous entrons des valeurs dans une seule table. En outre, j'ai essayé avec dans, mais pas de chance :( – Rahul

+0

Votre table a plus de colonnes que quatre? Dans ce cas, vous devrez peut-être spécifier les colonnes pour insérer explicitement, comme: 'insert into tbemp (column1, column2 , column3, column4) valeurs (@eno, @ename, @es, @eadd) ' –

+0

Et juste fyi, INTO ne peut pas être omis dans T-SQL. Voici quelques exemples utiles comment utiliser INSERT INTO correctement qui devrait vous obtenir plus loin: https://technet.microsoft.com/en-us/library/dd776381%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396 –

0

je ferais quelque chose comme ceci:

using (SqlCommand cmd = new SqlCommand()) 
    { 
     try 
     { 
     cmd.CommandText = 
     "INSERT tbemp VALUES (@eno, @ename, @es, @eadd)"; 
     cmd.Connection = con; 
     cmd.Parameters.Add("@eno", SqlDbType.Int).Value = 
      Convert.ToInt32(TextBox1.Text); 
     cmd.Parameters.Add("@ename", SqlDbType.VarChar, 50) 
      .Value = TextBox2.Text; 
     cmd.Parameters.Add("@es", SqlDbType.VarChar, 50).Value = 
      TextBox3.Text; 
     cmd.Parameters.Add("@eadd", SqlDbType.VarChar, 50).Value = 
      TextBox4.Text; 
       cmd.ExecuteNonQuery(); 

     TextBox1.Text = String.Empty; 
     TextBox2.Text = String.Empty; 
     TextBox3.Text = String.Empty; 
     TextBox4.Text = String.Empty; 
     TextBox1.Focus(); 
     } 
     catch (SqlException exception) 
     { 

      System.Diagnostics.Debug.WriteLine(exception.Message); 
      throw; 
     } 
     catch (Exception exception) 
     { 
      System.Diagnostics.Debug.WriteLine 
      ("General Exception caught: " + exception.Message); 
      throw; 
     } 

En cas d'exception, votre SqlCommand sera disposé à en mettant en une déclaration using. Maintenant vous obtiendrez également l'impression diagnostique des erreurs que vous recevez aussi. De plus, puisque vous ne faites rien avec l'exception (comme essayer de résoudre le problème par une nouvelle tentative), vous voulez lancer l'exception, afin que le code appelant la méthode sache que quelque chose ne va pas. Lorsque vous relancez une exception, vous ne voulez pas le faire throw exception, car cela réinitialisera la trace de la pile. Utilisez simplement throw.