2016-08-27 1 views
-1

J'ai un problème avec la commande d'insertion dans C# WinForm. J'ai besoin d'insérer un caractère spécial, donc j'ai besoin d'un paramètre ou d'une alternative. Mais je ne peux pas insérer les données dans DB. Ma 2ème colonne RecordNo permet unique et est un entier. C'est là que je suis confronté à des problèmes. Après avoir sauvegardé un rec lorsque je change le RecordNo et que j'essaie d'enregistrer des données, il montre que les données sont en double. Plzz m'aide à résoudre mon problème.C# OleDb Insert Entier avec le paramètre

Mon code:

private void saverec_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      int recva = Convert.ToInt32(recno_tb.Text); 
      myconn.ConnectionString = connestr; 
      dtcmd.CommandText = "INSERT INTO FormEntry (RecordNo) values ("+ recva + ")"; 
      dtcmd.Connection = myconn; 
      myconn.Open(); 
      dtcmd.ExecuteNonQuery(); 
      myconn.Close(); 
      dataconnect(); 
      myconn.ConnectionString = connestr; 
      dtcmd.CommandText = "UPDATE FormEntry SET ImageName = @imagena,EmailId = @email WHERE [RecordNo] = " + recva + "";    dtcmd.Parameters.Add("@imagena", OleDbType.VarChar).Value = imgname_tb.Text; 
      //dtcmd.Parameters.AddWithValue("@recno", recno_tb.Text); 
      dtcmd.Parameters.AddWithValue("@email", OleDbType.VarChar).Value = email_tb.Text; 
      dtcmd.Connection = myconn; 
      myconn.Open(); 
      dtcmd.ExecuteNonQuery(); 
      myconn.Close(); 
      dataconnect(); 
      addnew_Click(sender, e); 
      recno_tb.Text = (recva + 1).ToString(); 
      email_tb.Focus(); 
     } 
     catch (Exception ex) 
     { 
      if (ex.Message.ToString() == "The changes you requested to the table were not successful because they would create duplicate values in the index, primary key, or relationship. Change the data in the field or fields that contain duplicate data, remove the index, or redefine the index to permit duplicate entries and try again.") 
      { 
       MessageBox.Show("Record already exists. Try entering new record.\nYou can also find and edit the record.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      else if (ex.Message.ToString() == "Field 'FormEntry.RecordNo' cannot be a zero-length string.") 
      { 
       MessageBox.Show("Record No can't be null", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      else 
      { 
       MessageBox.Show(ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 
     myconn.Close(); 

    } 

j'avais googlé mais rien. Alors plz m'aider.

+1

Pour commencer, je vous suggérons d'utiliser SQL paramétrées * partout *, et pas seulement dans un seul endroit. Ensuite, je suggère de créer une nouvelle connexion et de la commander partout où vous en avez besoin, avec des instructions 'using' pour tout fermer de manière appropriée. Ensuite, je suggère de lire sur les conventions de nommage .NET, et de renommer vos méthodes et variables en conséquence. Après cela, mettez à jour la question. Je suppose que le problème peut être que OleDbCommand ne supporte que les paramètres de position, pas ceux qui sont nommés ... mais c'est difficile à dire maintenant. –

+0

Thx pour votre suggestion si vous avez fixé ci-dessous est la réponse. – Roshan

Répondre

-2

Ceci est la réponse. J'utilisais global connect var. Je l'ai juste changé et j'ai utilisé Parameter AddWithValue comme Add, je pense que c'est aussi une raison.

Le code est:

private void saverec_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       int recna = Convert.ToInt32(recno_tb.Text); 
       OleDbConnection myconn = new OleDbConnection(); 
       myconn.ConnectionString = connestr; 
       var insequ = "INSERT INTO FormEntry (ImageName, RecordNo, EmailId) VALUES (?,?,?)"; 
       OleDbCommand dtcmd = new OleDbCommand(insequ, myconn); 
       dtcmd.Parameters.AddWithValue("@imagena", OleDbType.VarChar).Value = imgname_tb.Text; 
       dtcmd.Parameters.AddWithValue("@recno", OleDbType.Integer).Value = recna; 
       dtcmd.Parameters.AddWithValue("@email", OleDbType.VarChar).Value = email_tb.Text; 
       myconn.Open(); 
       dtcmd.ExecuteNonQuery(); 
       myconn.Close(); 
       dataconnect(); 
       addnew_Click(sender, e); 
       recno_tb.Text = (recna + 1).ToString(); 
       email_tb.Focus(); 
      } 
      catch (Exception ex) 
      { 
       if (ex.Message.ToString() == "The changes you requested to the table were not successful because they would create duplicate values in the index, primary key, or relationship. Change the data in the field or fields that contain duplicate data, remove the index, or redefine the index to permit duplicate entries and try again.") 
       { 
        MessageBox.Show("Record already exists. Try entering new record.\nYou can also find and edit the record.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       } 
       else if (ex.Message.ToString() == "Field 'FormEntry.RecordNo' cannot be a zero-length string.") 
       { 
        MessageBox.Show("Record No can't be null", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       } 
       else 
       { 
        MessageBox.Show(ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       } 
      } 
      myconn.Close(); 

     } 
+0

Vous utilisez ici 'AddWithValue' - le deuxième paramètre' AddWithValue' est la valeur, pas le type. Vous n'utilisez toujours pas les instructions 'using' pour la commande ou la connexion. –

+0

Vous utilisez ici 'AddWithValue' - le deuxième paramètre' AddWithValue' est la valeur, pas le type. Vous n'utilisez toujours pas les instructions 'using' pour la commande ou la connexion. –