2017-05-12 10 views
1

私は出席システムを作っています。私は人の名前を検索して出席のためにログインしようとしましたが、今は問題です。それはまだ大丈夫です。一度、私は最初のまたは2番目のユーザーのログイン出席を編集しようと、私のdatagridview(データベースに接続)のすべての値が重複していた。私が週1の出席のためにname1を入力すればそれはいいです。 week1の出席のためのname2はまだうまいです。 私は同じ名前を編集する場合。またはさらに次の週番号に行くと、保存された値はすべて、最近入力した名前に基づいて複製されます。 新しいレコード Cでレコードを複製する#

SqlConnection cnn200 = new SqlConnection(connectionstring); 
      string sql200 = "SELECT * FROM attendance WHERE [email protected] "; 
      cnn200.Open(); 
      SqlCommand cmd200 = new SqlCommand(sql200, cnn200); 
      SqlDataReader rdr200; 
      cmd200.Parameters.AddWithValue("@csign", callsign); 

      rdr200 = cmd200.ExecuteReader(); 

       if (rdr200.Read() == true) 

       { 
      SqlConnection cnn201 = new SqlConnection(connectionstring); 
        if (textBox89.Text == "1") 
        { 
         string sql201 = "insert INTO attendance 
      (csign,name,week1)" + "VALUES" + "(@csign,@name,@week1)"; 
         cnn201.Open(); 
         SqlCommand cmd201 = new SqlCommand(sql201, cnn201); 
         cmd201.Parameters.AddWithValue("@csign", callsign); 
     cmd201.Parameters.AddWithValue("@name", namee); 
         cmd201.Parameters.AddWithValue("@week1", 
      comboBox1.Text); 

         cmd201.ExecuteNonQuery(); 
        } 
       if (textBox89.Text == "2") 
       { 
        string sql201 = "insert INTO attendance 
       (csign,name,week2)" + "VALUES" + "(@csign,@name,@week2)"; 
        cnn201.Open(); 
        SqlCommand cmd201 = new SqlCommand(sql201, cnn201); 
        cmd201.Parameters.AddWithValue("@csign", callsign); 
      cmd201.Parameters.AddWithValue("@name", namee); 
        cmd201.Parameters.AddWithValue("@week2", 
       comboBox1.Text); 

        cmd201.ExecuteNonQuery(); 
       } 

を挿入すると

   else{ 
      SqlConnection cnn201 = new SqlConnection(connectionstring); 
        if (textBox89.Text == "1") 
        { 
         string sql201 = "UPDATE attendance SET 
      [email protected],[email protected],[email protected]"; 
         cnn201.Open(); 
         SqlCommand cmd201 = new SqlCommand(sql201, cnn201); 

         cmd201.Parameters.AddWithValue("@name", namee); 
        cmd201.Parameters.AddWithValue("@csign", callsign); 
         cmd201.Parameters.AddWithValue("@week1", 
        comboBox1.Text); 

         cmd201.ExecuteNonQuery(); 
        } 
       if (textBox89.Text == "2") 
       { 
        string sql201 = "UPDATE attendance SET 
        [email protected],[email protected],[email protected]"; 
        cnn201.Open(); 
        SqlCommand cmd201 = new SqlCommand(sql201, cnn201); 

        cmd201.Parameters.AddWithValue("@name", namee); 
        cmd201.Parameters.AddWithValue("@csign", callsign); 
        cmd201.Parameters.AddWithValue("@week2", 
        comboBox1.Text); 

        cmd201.ExecuteNonQuery(); 
       }`} 
+1

効果的に役立つコードを表示する必要があります。 [ask]と[mcve]の作成方法をお読みください。 – gravity

+0

これは私のコードです レコードを更新する –

+0

この[編集]リンクをクリックして質問自体に追加してください。 – gravity

答えて

0

NICAを更新するために、私は私が助けることができると思います。あなたがやろうとしていることは、少ないコーディングラインで簡単に行うことができます。全体のDataGridViewのは、表示、編集、削除、およびいくつかのより多くのオブジェクトに何が起こっているかの簡単に説明として

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Globalization; 
using System.Data.SqlClient; 
using System.IO; 
using System.Configuration; 


namespace ADO_NET_Testbed 
{ 
    public partial class MainForm : Form 
    { 
     private SqlDataAdapter adapter; 
     private string connectionString = @"Data Source=Server;Persist Security Info=True;Password=password!;User ID=sooperuser;Initial Catalog=Database"; 
     private string sqlcommand = @"SELECT OPID, LastName, FirstName, Title, PhoneOffice, PhoneCell, Email, Active, Admin, Tester, Educator, Developer FROM AuditUser"; 
     private SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(); 
     private DataTable datatable = new DataTable(); 
     private DataSet dataset = new DataSet(); 

     public MainForm() 
     { 
      InitializeComponent(); 
     } 

     private void MainForm_Load(object sender, EventArgs e) 
     { 
      adapter = new SqlDataAdapter(sqlcommand, connectionString); 
      adapter.Fill(dataset, "AuditUser"); 
      dgvUsers.DataSource = dataset.Tables[0]; 
      dgvUsers.Enabled = true; 
      this.Show(); 
     } 

     private void btnCancel_Click(object sender, EventArgs e) 
     { 
      dataset.Clear(); 
      dataset.Reset(); 
      this.Close(); 
     } 

     private void btnSave_Click(object sender, EventArgs e) 
     { 
      cmdBuilder.DataAdapter = adapter; 
      adapter.Update(dataset.Tables[0]); 
      this.Close(); 
     } 
    } 
} 

を使用して、何の重複がないことができ、SqlDataAdapterオブジェクトは、4つのクエリを保持しているが、3からを自動作成しますSELECTコマンドSqlCommandBuilderを使用すると、他の3つが追加されますが、デバッガでNULL以外のものは表示されません。 adapter.Fill()およびadapter.Update()は、datagridviewの各行のRowStateに基づいて、すべての異なるコマンドを処理します。とにかくこのフォームが閉じられているので、「キャンセル」は過度の見方です。

+0

私のDataGridにデータを入れることに問題はありません。ここで私の問題は、一度私はログイン(出席チェック)ボタンをクリックし、私はすでにそこに複数のデータがある場合です。そのデータはすべて、私がログインする最新のデータまたは最新のデータに基づいて複製されます。 ex。私はすでに名前1をログインしています。そして、私のシステムで名前2にログインすると、データベースのすべての名前が名前2に変更されます。 –

関連する問題