2017-05-12 91 views
1

我正在考勤系統,現在這是我的問題,我搜索了一個人的名字,並嘗試登錄他的出席,它首先是好的,登錄後第二命名它仍然很好。但是一旦我嘗試編輯第一個或第二個用戶的登錄出席時,我的datagridview(連接到我的數據庫)中的所有值都重複了。如果我在week1中輸入name1參加考試,那很好。第1周的參加者名字2仍然沒問題。 但如果我編輯相同的名稱。甚至去下一週的數字,所有保存的值都根據我最近輸入的名稱重複。對於 插入新記錄在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

您需要向我們展示一些代碼纔能有效地提供幫助。請閱讀[問]以及如何創建[mcve]。 – gravity

+0

這是我的代碼 用於更新記錄 –

+0

再次,請點擊這個[編輯]鏈接,並添加到問題本身。 – gravity

回答

0

尼加,我想我可以提供幫助。使用較少的編碼線就可以輕鬆完成您想要做的事情。一個完整的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的持有四個查詢沒有重複,但自動創建三個來自SELECT命令。使用SqlCommandBuilder可以添加其他三個,儘管調試器不會將它們顯示爲NULL而不顯示它們。 adapter.Fill()和adapter.Update()根據datagridview中每行的RowState處理所有不同的命令。無論如何,這個表單無論如何都是關閉的,「取消」看起來太過分了。

+0

填充我的數據網格沒有問題。我的問題是,一旦我點擊登錄(出席檢查)按鈕,如果我已經有多個數據在那裏。所有這些數據將根據我將登錄的最新或最近的數據進行復制。 ex。我有名字1已經登錄。一旦我登錄名稱2在我的系統中,我的數據庫中的所有名稱將重命名爲名稱2。 –