而不是更新record update命令创建新条目

时间:2020-05-31 04:33:38

标签: sql-server

在运行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();  
}

1 个答案:

答案 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();
}