![](/img/trans.png)
[英]WinForm C#: Datagridview combobox it is duplicating records from second line
[英]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.