我的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 !!!!!");
答案 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 =>未插入,因为有重复。