2017-09-13 10 views
0

私はデータベースに新しい行を追加するためにdatagridviewを使用しようとしています。私は事前にグリッドにデータベース全体をロードし、それをリフレッシュしたくないと思います。私は、データグリッドの値をテーブルに追加したいだけです。私は回避策を見つけることができません。私がそれを正常に行うと、すべての変数が一意である必要があるというエラーが表示されます。 sqlconnection.parameters.clear()関数を追加しようとしましたが、すべての値が空になり、パラメータの必要な情報を提供していないというエラーが表示されるようです。パラメータを使ってテーブルにデータグリッドビューの値を繰り返し挿入しようとしています

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

      } 

答えて

0

forループの開始でだけ明確な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が壊れているかもしれないかのように感じます。ランダムな宣言文でnullreferencesのエラーを投げ始めました。 –

+0

は、forループ内でticketTableInsertCMDを定義してインスタンス化すると役立ちます。 – Hamed

0

を私はループの外のパラメータを追加して、ちょうどそれらの値を変更ループ内。

   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()); 
関連する問題