我有一个项目(使用c#和SQLServer),它应该在多个客户端上运行,每个客户端应该与中央SQL Server通信。所有客户端和服务器都在同一个本地网络上
一切都很好,但是......在某些情况下,当在客户端上运行插入查询时,会有多个重复记录插入到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
有人能告诉我为什么在某些情况下会插入多条记录而不是单条记录?怎么解决?你认为这是一个与网络有关的问题吗?
感谢
答案 0 :(得分:0)
几乎可以肯定,用户点击按钮两次。您应该在单击事件处理程序中首先禁用该按钮,然后在适当的时候再次启用它;是什么构成了适当的时间"由你决定。
答案 1 :(得分:0)
在表中插入数据之前,您可以对数据进行验证,无论数据是否重复。
首先检查表中哪一列是唯一的,根据唯一列,您可以检查数据,否则在表中创建一个复合键(如果没有唯一列)并在插入之前验证数据。如果数据通过消息重复发送给用户。