2017-09-13 7 views
0

J'ai donc essayé d'utiliser une vue de données pour ajouter de nouvelles lignes dans ma base de données. Je préférerais ne pas charger la base de données entière dans la grille à l'avance et l'actualiser. Je veux juste ajouter les valeurs de la grille de données dans la table. Je ne peux pas trouver une solution de contournement. Si je le fais normalement, cela me donnera l'erreur que toutes les variables doivent être uniques. J'ai essayé d'ajouter la fonction sqlconnection.parameters.clear(), mais il semble que toutes les valeurs soient vides et me donne l'erreur de ne pas fournir les informations nécessaires pour les paramètres.J'ai essayé d'insérer des valeurs de datagridview dans une table de manière itérative en utilisant les paramètres

string TicketTableInsertString = "INSERT INTO ticketTable (TicketID, num1, num2,num3,num4,num5) VALUES (@TicketID,@num1,@num2,@num3,@num4,@num5)"; 

     SqlConnection sqlConn; 
     connString = "Data Source=DESKTOP-30191JE\\SQLEXPRESS;Initial Catalog=Test;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"; 
     sqlConn = new SqlConnection(connString); 

     try 
     { 
      sqlConn.Open(); 
      int ticketID=0; 
      SqlCommand selectTicketIDCMD = new SqlCommand(selectTicketIDString, sqlConn); 
      SqlCommand mainTableInsertCMD = new SqlCommand(MainTableInsertString, sqlConn); 
      SqlCommand ticketTableInsertCMD = new SqlCommand(TicketTableInsertString, sqlConn); 
      ticketID = (int)selectTicketIDCMD.ExecuteScalar()+1; 
      sqlConn.Close(); 


      for (int i = 0; i < dgv_ticket.Rows.Count; i++) 
      { 

       ticketTableInsertCMD.Parameters.AddWithValue("@TicketID", ticketID);    
       ticketTableInsertCMD.Parameters.AddWithValue("@num1", dgv_ticket.Rows[i].Cells[0].Value); 
       ticketTableInsertCMD.Parameters.AddWithValue("@num2", dgv_ticket.Rows[i].Cells[1].Value); 
       ticketTableInsertCMD.Parameters.AddWithValue("@num3", dgv_ticket.Rows[i].Cells[2].Value); 
       ticketTableInsertCMD.Parameters.AddWithValue("@num4", dgv_ticket.Rows[i].Cells[3].Value); 
       ticketTableInsertCMD.Parameters.AddWithValue("@num5", dgv_ticket.Rows[i].Cells[4].Value); 
       sqlConn.Open(); 
       ticketTableInsertCMD.ExecuteNonQuery(); 
       sqlConn.Close(); 

      } 

Répondre

0

Juste paramètres sqlCommand clairs dans début de boucle et de définir TicketID pour chaque ligne:

for (int i = 0; i < dgv_ticket.Rows.Count; i++) 
     { 
      ticketID = (int)selectTicketIDCMD.ExecuteScalar()+1; 
      ticketTableInsertCMD.Parameters.Clear(); 
      ticketTableInsertCMD.Parameters.AddWithValue("@TicketID", ... 
+0

mentionné que dans mon message j'ai déjà essayé de. Il a plutôt donné une erreur différente en disant que je ne lui fournissais aucune valeur. –

+0

En fait, à ce stade, j'ai l'impression que mon IDE pourrait être corrompu. Il a commencé à lancer une erreur pour les références nulles sur les déclarations de déclaration aléatoires. –

+0

définir et instancier ticketTableInsertCMD à l'intérieur de la boucle, cela aiderait. – Hamed

0

trouvé un moyen de le faire correctement, j'ai ajouté les paramètres en dehors de la boucle, puis vient de changer leurs valeurs à l'intérieur de la boucle.

   ticketTableInsertCMD.Parameters.Add("@TicketID", SqlDbType.Int); 
       ticketTableInsertCMD.Parameters.Add("@num1", SqlDbType.Int); 
       ticketTableInsertCMD.Parameters.Add("@num2", SqlDbType.Int); 
       ticketTableInsertCMD.Parameters.Add("@num3", SqlDbType.Int); 
       ticketTableInsertCMD.Parameters.Add("@num4", SqlDbType.Int); 
       ticketTableInsertCMD.Parameters.Add("@num5", SqlDbType.Int); 



      for (int i = 0; i < dgv_ticket.Rows.Count-1; i++) 
      { 
       ticketTableInsertCMD.Parameters["@TicketID"].Value = ticketID; 
       ticketTableInsertCMD.Parameters["@num1"].Value = int.Parse(dgv_ticket.Rows[i].Cells[0].Value.ToString()); 
       ticketTableInsertCMD.Parameters["@num2"].Value = int.Parse(dgv_ticket.Rows[i].Cells[1].Value.ToString()); 
       ticketTableInsertCMD.Parameters["@num3"].Value = int.Parse(dgv_ticket.Rows[i].Cells[2].Value.ToString()); 
       ticketTableInsertCMD.Parameters["@num4"].Value = int.Parse(dgv_ticket.Rows[i].Cells[3].Value.ToString()); 
       ticketTableInsertCMD.Parameters["@num5"].Value = int.Parse(dgv_ticket.Rows[i].Cells[4].Value.ToString());