簡體   English   中英

在c#中復制記錄

[英]Duplicating records in c#

我正在制作一個考勤系統,現在這是我的問題,在我搜索了一個人的名字並嘗試登錄他出席之后,一開始就沒問題,在登錄第二個名字之后它仍然沒問題。 但是一旦我嘗試編輯第一個或第二個用戶的登錄出勤率,我的datagridview(連接到我的數據庫)中的所有值都會重復。 如果我輸入name1參加我的第一周就可以了。 第1周出席的名字2仍然沒問題。 但如果我編輯相同的名稱。 或者甚至轉到下一周的數字,所有保存的值都根據我最近輸入的名稱重復。 用於插入新記錄

    SqlConnection cnn200 = new SqlConnection(connectionstring);
            string sql200 = "SELECT * FROM attendance WHERE csign=@csign ";
            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 
          name=@name,csign=@csign,week1=@week1";
                        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 
                   name=@name,csign=@csign,week2=@week2";
                    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();
                }`}

尼卡,我想我可以幫忙。 您可以使用較少的編碼線輕松完成您要做的事情。 通過使用更多對象,可以顯示,編輯,刪除整個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處理所有不同的命令。 無論如何,“取消”看起來有點過分了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM