C# 插入与更新

C# 插入与更新,c#,asp.net,sql,C#,Asp.net,Sql,我有以下疑问: SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["chestionar"].ConnectionString); SqlCommand cmd = new SqlCommand("INSERT INTO Raspunsuri Values(@raspuns,@cnp,@data,'1',@ip,@idsesiune)", con); cmd.Parameters.AddWi

我有以下疑问:

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["chestionar"].ConnectionString);
SqlCommand cmd = new SqlCommand("INSERT INTO Raspunsuri Values(@raspuns,@cnp,@data,'1',@ip,@idsesiune)", con);

cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]);
cmd.Parameters.AddWithValue("@raspuns", textbox1.Text);
cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime());
cmd.Parameters.AddWithValue("@ip",ip);
cmd.Parameters.AddWithValue("@idsesiune", id_sesiune);

try
{
    con.Open();
    cmd.ExecuteNonQuery();
    Response.Redirect("User2.aspx");
}
catch (Exception ex)
{
    Console.WriteLine("Error:" + ex);
}
finally
{
    con.Close();
}

我需要的是看看表中是否有任何记录,如果有,然后再插入它。我如何才能做到这一点

这可能最好在存储过程中完成,因为其中涉及的脚本数量太多,所以内联操作会很混乱

将参数传递给存储过程并执行以下操作:

IF EXISTS(SELECT cnp FROM Raspunsuri WHERE cnp=@cnp)
BEGIN
    UPDATE ...
    WHERE cnp=@cnp
END
ELSE
BEGIN
    INSERT INTO....
END
假设@cnp是您的主键

然后,您的SqlCommand将更改为:

SqlCommand cmd = new SqlCommand("sp_StoredProcedureName", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]);
cmd.Parameters.AddWithValue("@raspuns", textbox1.Text);
cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime());
cmd.Parameters.AddWithValue("@ip",ip);
cmd.Parameters.AddWithValue("@idsesiune", id_sesiune);

这可能最好在存储过程中完成,因为涉及的脚本数量太多,所以内联会很混乱

将参数传递给存储过程并执行以下操作:

IF EXISTS(SELECT cnp FROM Raspunsuri WHERE cnp=@cnp)
BEGIN
    UPDATE ...
    WHERE cnp=@cnp
END
ELSE
BEGIN
    INSERT INTO....
END
假设@cnp是您的主键

然后,您的SqlCommand将更改为:

SqlCommand cmd = new SqlCommand("sp_StoredProcedureName", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]);
cmd.Parameters.AddWithValue("@raspuns", textbox1.Text);
cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime());
cmd.Parameters.AddWithValue("@ip",ip);
cmd.Parameters.AddWithValue("@idsesiune", id_sesiune);
您可以从SQL Server使用@@ROWCOUNT功能

UPDATE Raspunsuri SET (...) WHERE PrimaryKeyColumn='YourValue'
IF @@ROWCOUNT=0
    INSERT INTO Raspunsuri VALUES (...)
类似的问题:

您可以从SQL Server使用@@ROWCOUNT功能

UPDATE Raspunsuri SET (...) WHERE PrimaryKeyColumn='YourValue'
IF @@ROWCOUNT=0
    INSERT INTO Raspunsuri VALUES (...)
类似问题:

我需要的是查看表中是否有任何记录,以及是否有更新else insert 是的,我怎样才能做到呢

编写正确的SQL

你需要做的基本工作被称为“升级”

有一个很好的解释

我需要的是查看表中是否有任何记录,以及是否有更新else insert 是的,我怎样才能做到呢

编写正确的SQL

你需要做的基本工作被称为“升级”


有一个很好的解释。

首先,您可以通过将查询写入Select count*from tablename,其中columnvalue=something来检查记录是否存在于表中。如果count大于0,则表中有记录。因此,在这种情况下,您可以编写Update语句,也可以编写Insert语句。您可以在代码中写入,也可以通过编写存储过程来执行此操作。

首先,您可以通过将查询写入Select count*from tablename,其中columnvalue=something来检查记录是否存在于表中。如果count大于0,则表具有记录。因此,在这种情况下,您可以编写Update语句,或者编写Insert语句。这可以在代码中编写,也可以通过编写存储过程来编写。

可以在SQL中使用Exists函数。比如说

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["chestionar"].ConnectionString);   
    SqlCommand cmd = new SqlCommand("if Exists(Select 1 from Raspunsuri where <your unique criteria>)\r\n" +
"Update Raspunsuri set <values you want to set> where <your unique criteria\r\n" +
"else\r\n" +
"INSERT INTO Raspunsuri Values(@raspuns,@cnp,@data,'1',@ip,@idsesiune)", con);

    cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]);   
    cmd.Parameters.AddWithValue("@raspuns", textbox1.Text);   
    cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime());   
    cmd.Parameters.AddWithValue("@ip",ip);   
    cmd.Parameters.AddWithValue("@idsesiune", id_sesiune);   

这就应该做到了。您可以在SQL中使用Exists函数。比如说

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["chestionar"].ConnectionString);   
    SqlCommand cmd = new SqlCommand("if Exists(Select 1 from Raspunsuri where <your unique criteria>)\r\n" +
"Update Raspunsuri set <values you want to set> where <your unique criteria\r\n" +
"else\r\n" +
"INSERT INTO Raspunsuri Values(@raspuns,@cnp,@data,'1',@ip,@idsesiune)", con);

    cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]);   
    cmd.Parameters.AddWithValue("@raspuns", textbox1.Text);   
    cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime());   
    cmd.Parameters.AddWithValue("@ip",ip);   
    cmd.Parameters.AddWithValue("@idsesiune", id_sesiune);   
这应该能奏效

我需要的是看看表中是否有记录,是否有 不是更新,而是插入它。我如何才能做到这一点

我喜欢@Alex的方法

-- For each row in source
BEGIN TRAN

UPDATE target
SET <target_columns> = <source_values>
WHERE <target_expression>

IF (@@ROWCOUNT = 0)
INSERT target (<target_columns>)
VALUES (<source_values>)

COMMIT
我需要的是看看表中是否有记录,是否有 不是更新,而是插入它。我如何才能做到这一点

我喜欢@Alex的方法

-- For each row in source
BEGIN TRAN

UPDATE target
SET <target_columns> = <source_values>
WHERE <target_expression>

IF (@@ROWCOUNT = 0)
INSERT target (<target_columns>)
VALUES (<source_values>)

COMMIT

什么定义记录已经在表中?什么是唯一的数据?基本上,您只需要先执行SELECT或COUNT查询来查找数据,如果数据在那里,您可以执行更新而不是INSERT什么定义记录已经在表中?什么是唯一的数据?基本上,你只需要先做一个选择或计数查询来查找数据,如果数据在那里,你可以进行更新,而不是插入对不起,我当时不在电脑旁,没有看到Curt已经发布了与我建议的相同的答案。它什么都没做..对不起,我不在电脑前,没有看到Curt已经发布了与我建议的相同的答案。它没有任何作用。我完全同意。以1票赞成。例如:当我告诉ORM时,它会自动生成UPSERT,并且它不使用存储过程。想做就做我完全同意。以1票赞成。例如:当我告诉ORM时,它会自动生成UPSERT,并且它不使用存储过程。想做就做