C# LINQ到SQL存储过程插入

C# LINQ到SQL存储过程插入,c#,sql,sql-server,linq,C#,Sql,Sql Server,Linq,嗨,我有以下存储过程: create procedure dbo.AddNewUser ( @uName nvarchar(20), @pass nvarchar(20), @fName nvarchar(20), @lName nvarchar(20) ) AS insert into [Users] (Username, Password, Firstname, Lastname) values (@uName, @pass, @fName,

嗨,我有以下存储过程:

create procedure dbo.AddNewUser
(
    @uName nvarchar(20),
    @pass nvarchar(20),
    @fName nvarchar(20),
    @lName nvarchar(20)
)
AS
    insert into [Users] (Username, Password, Firstname, Lastname)
    values (@uName, @pass, @fName, @lName)
这是我的表格的代码:

CREATE TABLE [dbo].[Users] (
    [Id]        INT        IDENTITY (1, 1) NOT NULL,
    [Username]  NCHAR (20) NOT NULL,
    [Password]  NCHAR (20) NOT NULL,
    [Firstname] NCHAR (20) NOT NULL,
    [Lastname]  NCHAR (20) NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);
我的windows窗体程序目前有4个文本框和1个按钮。我正在尝试将文本框中的文本插入我的数据库。这是我的单击事件中的代码:

DatabaseConnectionDataContext dc = new DatabaseConnectionDataContext();
dc.AddNewUser(tbUsername.Text, tbPassword.Text, tbFirstname.Text, tbLastname.Text);
dc.SubmitChanges();

当我启动程序时,在文本框中输入一些数据并单击按钮,文本框中的数据将插入表格,但当我再次启动程序并在文本框中输入一些数据时,新数据将插入第一行,而不是创建新行,旧数据将被删除。任何人都可以提出为什么会发生这种情况

您缺少检查用户是否存在,通常您会通过id进行检查

using (var dc = new DatabaseConnectionDataContext()){
if (dc.Users.Any(o => o.Username== tbUsername.Text && o.Password == tbPassword.Text ...){
...

}else{dc.AddNewUser(tbUsername.Text, tbPassword.Text, tbFirstname.Text, tbLastname.Text);}

dc.SubmitChanges();
}
编辑:已阅读StefanoGermani的评论

您是否正在内存ravenDb中运行?

您是如何查看新插入的数据的?每次调用proc都会在表中插入新行。我正在使用Microsoft Visual Studio 2012是否确实没有以某种方式覆盖/删除数据库?您使用的是什么数据库?这是我第一次尝试c#.net和数据库,因此我认为我没有覆盖数据库。上面的代码是到目前为止我在程序中仅有的东西。我当前使用的是MS SQL SERVER 2012。能否向我们显示Linq到SQL数据上下文使用的连接字符串?