在运行update命令时,它将其作为新条目插入,而不更新前一个条目。用户名是插入表中的外键。而不是更新record update命令来创建新条目。
我已经写了一个存储过程来插入数据:
CREATE PROCEDURE Login_insert
@Name nvarchar(50),
@Address varchar(50),
@City varchar(50),
@DateOfBirth datetime,
@Username nvarchar(50)
AS
BEGIN
INSERT INTO NewUser
VALUES (@Name, @Address, @City, @DateOfBirth, @Username)
END
,然后从我的C#代码中调用它,如下所示:
protected void Button1_Click(object sender, EventArgs e)
{
int count = 0;
SqlCommand command;
SqlConnection con = new SqlConnection("Data Source=DESKTOP-HKML31V\\SQLEXPRESS;Initial Catalog=DB;Integrated Security=True");
con.Open();
if (count > 0)
{
command = new SqlCommand("UPDATE NewUser SET Name = @Name, Address = @Address, City = @City, DateofBith = @DateofBirth WHERE Id = @Username", con);
}
else
{
command = new SqlCommand("Login_insert", con);
command.CommandType = System.Data.CommandType.StoredProcedure;
command.Parameters.AddWithValue("Name", TextBox1.Text);
command.Parameters.AddWithValue("Address", TextBox2.Text);
command.Parameters.AddWithValue("City", TextBox3.Text);
command.Parameters.AddWithValue("DateofBirth", TextBox4.Text);
command.Parameters.AddWithValue("Username", Label1.Text);
}
int rowsupdated = command.ExecuteNonQuery();
}
答案 0 :(得分:0)
我可能会将整个逻辑打包到存储过程中:传递所有值,然后让存储过程首先检查您感兴趣的记录是否存在-如果存在,则对其进行更新-如果不存在,则插入新的记录
CREATE PROCEDURE dbo.InsertOrUpdateUser
@Name nvarchar(50),
@Address varchar(50),
@City varchar(50),
@DateOfBirth datetime,
@Username nvarchar(50)
AS
BEGIN
-- check if the user already exists
IF EXISTS (SELECT * FROM dbo.NewUser WHERE Id = @Username)
BEGIN
-- user does exist - update it
UPDATE NewUser
SET Name = @Name,
Address = @Address,
City = @City,
DateofBith = @DateofBirth
WHERE Id = @Username
END
ELSE BEGIN
-- user does not exist - insert a new entry
INSERT INTO NewUser (Name, Address, City, DateOfBirth, Id)
VALUES (@Name, @Address, @City, @DateOfBirth, @Username)
END
END
,然后从您的C#代码中调用此存储过程:
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source=DESKTOP-HKML31V\\SQLEXPRESS;Initial Catalog=DB;Integrated Security=True");
SqlCommand cmdInsertOrUpdate = new SqlCommand("dbo.InsertOrUpdateUser", con);
cmdInsertOrUpdate .CommandType = CommandType.StoredProcedure;
cmdInsertOrUpdate.Parameters.Add("@Name", SqlDbType.NVarChar, 50).Value = TextBox1.Text;
cmdInsertOrUpdate.Parameters.Add("@Address", SqlDbType.NVarChar, 50).Value = TextBox2.Text;
cmdInsertOrUpdate.Parameters.Add("@City", SqlDbType.NVarChar, 50).Value = TextBox3.Text;
cmdInsertOrUpdate.Parameters.Add("@DateofBirth", SqlDbType.DateTime).Value = Convert.ToDateTime(TextBox4.Text);
cmdInsertOrUpdate.Parameters.Add("@Username", SqlDbType.NVarChar, 50).Value = Label1.Text;
con.Open();
int rowsupdated = cmdInsertOrUpdate.ExecuteNonQuery();
con.Close();
}