尝试使用参数迭代地将datagridview的值插入表中

问题描述:

所以我一直试图使用datagridview向数据库中添加新行。我不希望事先将整个数据库加载到网格中并刷新它。我只想将datagrid中的值添加到表中。我找不出解决方法。如果我通常这样做,它会给我所有变量都需要唯一的错误。我试图添加sqlconnection.parameters.clear()函数,但似乎它使所有的值变空,并给我一个错误,我不提供参数的必要信息。在for循环开始尝试使用参数迭代地将datagridview的值插入表中

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

      } 

就明确SqlCommand的参数和设置ticketID每一行:

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

提到,在我的帖子中,我已经尝试过。它反而给了一个不同的错误,说我没有提供任何值。 –

+0

实际上,在这一点上,我感觉好像我的IDE可能是被损坏的。它开始为随机声明语句中的null参考引发错误。 –

+0

在for循环中定义并实例化ticketTableInsertCMD,这将有所帮助。 – Hamed

找到了一种方法做正确,我添加的参数外循环,然后就改变了自己的价值在循环内。

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