INSERT与更新

时间:2012-03-07 10:27:45

标签: 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.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();
}

我需要的是看表中是否有任何记录,是否有更新,否则插入它。我怎么能实现呢?

6 个答案:

答案 0 :(得分:6)

这可能最好在存储过程中完成,因为涉及的脚本数量很多(内联时会很混乱!)。

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

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);

答案 1 :(得分:2)

您可以使用SQL Server中的@@ROWCOUNT功能。

UPDATE Raspunsuri SET (...) WHERE PrimaryKeyColumn='YourValue'
IF @@ROWCOUNT=0
    INSERT INTO Raspunsuri VALUES (...)

类似的问题:Insert / Update to Sql

答案 2 :(得分:2)

您可以在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);   

应该做的伎俩

答案 3 :(得分:0)

  

我需要的是查看表中是否有任何记录以及是否有更新其他插入   它。我怎么能实现这一目标?

编写正确的SQL?

Basiacll你需要在论坛中被称为&#34; Upsert&#34;。

http://www.databasejournal.com/features/mssql/article.php/3739131/UPSERT-Functionality-in-SQL-Server-2008.htm

有一个很好的解释。

答案 4 :(得分:0)

首先,通过将查询写为“从tablename中选择count(*)wherevalvalue =”something“来检查表中是否存在记录。如果count大于0,则表有记录。所以在这种情况下你编写一个Update语句,然后编写Insert语句。这可以写入代码或编写存储过程。

答案 5 :(得分:0)

  

我需要的是查看表中是否有任何记录以及是否有记录   是比更新,否则插入它。我怎么能实现呢?

我喜欢@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