C#& SQL Server:如何添加验证以阻止插入重复的用户名

时间:2016-03-10 00:57:25

标签: c# sql sql-server

我的Windows窗体应用程序中有一个用于管理员用户的表单,以便他们可以添加,编辑和删除用户。我遇到的问题是管理员可以插入一个新用户,该用户与另一个用户具有相同的用户名,导致两个用户在登录系统时都有重复的用户名。

我只需要一些基本的验证,以便在重复使用时不会插入用户名,但我不确定如何将其添加到dataadapter。

SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|Data.mdf;Integrated Security=True");
con.Open();

SqlDataAdapter sda = new SqlDataAdapter("INSERT INTO Login (FirstName, Role, Username, Password, Surname) VALUES ('" + txtfirstname2.Text + "','" + rolecombo.Text + "','" + txtusername2.Text + "','" + txtpassword2.Text + "','" + txtsurname.Text + "')", con);

sda.SelectCommand.ExecuteNonQuery();
con.Close();

MessageBox.Show("SAVED SUCCESSFULLY !!!!!");

2 个答案:

答案 0 :(得分:1)

创建插入触发器或唯一键索引:

Trigger to prevent Insertion for duplicate data of two columns

这样的事情:

CREATE TRIGGER MyTrigger ON dbo.MyTable
AFTER INSERT
AS

if exists ( select * from table t 
    inner join inserted i on i.name=t.name and i.date=t.date)
begin
    rollback
    RAISERROR ('Duplicate Data', 16, 1);
end
go

仅用于插入,您可能也想考虑更新。

更新

更简单的方法是在表上创建一个唯一约束,这也将强制执行更新,并消除对触发器的需要。只是做:

ALTER TABLE [dbo].[TableName]    
ADD CONSTRAINT [UQ_ID_Name_Date] UNIQUE NONCLUSTERED
(
    [Name], [Date]
)

然后你就会开展业务。

答案 1 :(得分:0)

在INSERT查询中添加WHERE NOT EXISTS子句以检查用户名是否存在,然后使用ExecuteNonQuery的返回值(受影响的行数)来确定您的用户是否已插入。 0 =>未插入,因为有重复。