2016-08-27 3 views
-1

einfügen Ich habe ein Problem mit dem Befehl in C# WinForm einzufügen. Ich muss spezielle Char einfügen, also brauche ich Parameter oder eine Alternative. Aber ich kann die Daten nicht in db einfügen. Meine zweite Spalte RecordNo erlaubt unique und ist eine ganze Zahl. Hier habe ich Probleme. Nach dem Speichern einer Aufnahme, wenn ich die RecordNo ändere und versuche, Daten zu speichern, werden Daten doppelt angezeigt. Plzz helfen mir mein Problem zu beheben.C# OleDb Integer mit Parameter

Mein 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(); 

    } 

ich gegoogelt es hatte aber keinen Gebrauch. Also bitte hilf mir.

+1

mit zu beginnen, würde ich vorschlagen, parametrisierte SQL verwenden * überall *, nicht nur an einem einzigen Ort. Als nächstes würde ich vorschlagen, eine neue Verbindung zu erstellen und überall dort Befehle zu geben, wo Sie sie brauchen, mit 'using' Anweisungen, um alles entsprechend zu schließen. Als Nächstes empfehle ich, die Namenskonventionen von .NET zu lesen und die Methoden und Variablen entsprechend umzubenennen. Aktualisieren Sie danach die Frage. Ich vermute, das Problem könnte sein, dass "OleDbCommand" nur positionale Parameter unterstützt, nicht benannte ... aber es ist momentan schwer zu sagen. –

+0

Thx für Ihren Vorschlag, wenn unten behoben ist die Antwort. – Roshan

Antwort

-2

Dies ist die Antwort. Ich benutzte globale connect var. Ich habe es nur geändert und ich habe Parameter AddWithValue als Add verwendet, ich denke, das ist auch ein Grund.

Der Code ist:

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

Sie missbrauchen 'AddWithValue' hier - der zweite Parameter zu' AddWithValue' ist der Wert, nicht der Typ. Sie verwenden immer noch keine using-Anweisungen für den Befehl oder die Verbindung. –

+0

Sie missbrauchen 'AddWithValue' hier - der zweite Parameter zu' AddWithValue' ist der Wert, nicht der Typ. Sie verwenden immer noch keine using-Anweisungen für den Befehl oder die Verbindung. –