2017-05-12 94 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。 –