C# SQL Server重复插入
C# SQL Server重复插入,c#,sql-server,sql-insert,duplicates,C#,Sql Server,Sql Insert,Duplicates,我有一个项目(使用c#和SQLServer),它应该在多个客户机上运行,每个客户机都应该与中央SQLServer通信。所有客户端和服务器都位于同一个本地网络上。 一切都很好,但是。。。在某些情况下,当在客户端上运行insert查询时,会将多个重复记录插入sql server。这个问题很少发生。 下面是查询。填写表单并单击按钮触发事件时,查询将运行。 public static int insertSick(string firstname,string lastname,string mobil
我有一个项目(使用c#和SQLServer),它应该在多个客户机上运行,每个客户机都应该与中央SQLServer通信。所有客户端和服务器都位于同一个本地网络上。
一切都很好,但是。。。在某些情况下,当在客户端上运行insert查询时,会将多个重复记录插入sql server。这个问题很少发生。
下面是查询。填写表单并单击按钮触发事件时,查询将运行。
public static int insertSick(string firstname,string lastname,string mobile,string address)
{
using (SqlConnection connection = new SqlConnection(getConnectionString()))
{
string sql = "insert into TSick (Firstname,Lastname,MobileNumber,Address) values
(@fname,@lname,@mobile,@address)";
connection.Open();
SqlTransaction tran = connection.BeginTransaction();
SqlCommand command = new SqlCommand(sql, connection, tran);
command.Parameters.AddWithValue("fname", firstname);
command.Parameters.AddWithValue("lname", lastname);
command.Parameters.AddWithValue("mobile", mobile);
command.Parameters.AddWithValue("address", address);
int nRecord = command.ExecuteNonQuery();
tran.Commit();
return nRecord;
}
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
// check the text fields and validate them
insertSick(firstname,lastname,mobile,address);
}
下表如下:
TSick :
- ID --> this column is an incremental identity
- Firstname
- Lastname
- Mobilenumber
- Address
有人能告诉我为什么在某些情况下不是一条记录而是插入多条记录吗?如何解决?你认为这是一个与网络相关的问题吗?
谢谢几乎可以肯定,用户会点击按钮两次。您应该在click事件处理程序中首先禁用按钮,然后在适当的时间再次启用它;“适当时间”由您决定。在表中插入数据之前,您可以验证数据是否重复
首先检查表中哪个列是唯一的,根据唯一列可以检查数据,否则在表中创建复合键(如果没有唯一列),并在插入之前验证数据。如果通过发送给用户的消息复制了数据 如果您有一个标识列,那么您有两个不同的记录。但是,您可以发布将这些数据写入数据库的实际代码吗?可能是用户多次单击该按钮吗?每次数据库操作后文本字段是否被清除?如果没有任何相关的C#代码,将很难提供帮助。你能用更多的代码更新这个问题吗?我怀疑这是与网络相关的问题,我认为这不是点击问题。因为我看到一张插入了12次的唱片。!!!代码已更新。谢谢。我将测试这个解决方案并反馈结果。我可以用这种解决方案解决问题。但我心里有一个问题。为什么一条记录(在某些情况下)会被多次插入?这是因为用户多次单击按钮。第一次单击后禁用“单击”按钮。但最好的选择是在插入之前进行验证,如果出现任何重复数据,表将不允许该数据,并且您可以将错误告知用户。