[英]count then insert else update [closed]
我有以下代码,我试图做一个计数,如果if(count)== 0而不是插入else更新,我似乎无法弄清楚出什么问题了。如果查询,该页面应该转到下一页完成,但页面仅重新加载,没有插入或更新数据。当我按一个按钮时应该执行此操作。您能帮我这个忙吗? 我之前问过但没有答案,我自己尝试了一下,但似乎看不出问题所在。很抱歉重复
string ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(ip))
{
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
String id_sesiune;
id_sesiune = Session.SessionID;
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["chestionar"].ConnectionString);
con.Open();
SqlCommand cmd1 = new SqlCommand("SELECT count(*) from Raspunsuri where id_intrebare=2",con);
int read = Convert.ToInt16(cmd1.ExecuteScalar());
if (read == 0)
{
SqlCommand cmd = new SqlCommand("INSERT INTO Raspunsuri Values(@raspuns,@cnp,@data,'2',@ip,@idsesiune)", con);
cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]);
cmd.Parameters.AddWithValue("@raspuns", textbox2.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("User3.aspx");
}
catch (Exception ex)
{
Console.WriteLine("Error:" + ex);
}
finally
{
con.Close();
}
}
else
{
SqlCommand cmd = new SqlCommand("UPDATE Raspunsuri SET raspuns=@raspuns,cod_numeric_personal=@cnp,data_raspuns=@data,id_intrebare=2,ip_user=@ip,id_sesiune=@idsesiune WHERE id_intrebare=2", con);
cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]);
cmd.Parameters.AddWithValue("@raspuns", textbox2.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("User3.aspx");
}
catch (Exception ex)
{
Console.WriteLine("Error:" + ex);
}
finally
{
con.Close();
}
}
当遇到这种情况时,我将恢复为存储过程。
CREATE PROCEDURE UpsertRasPunsuri(@keyID int, @cnp int, @raspuns nvarchar(30),
@data smalldatetime, @ip nvarchar(30), @idsesiune int)
AS
BEGIN
declare @cnt int
SELECT @cnt = count(*) from Raspunsuri where id_intrebare=@keyID
if @cnt = 0
INSERT INTO Raspunsuri Values(@raspuns,@cnp,@data,2,@ip,@idsesiune)
else
UPDATE Raspunsuri SET
raspuns=@raspuns,cod_numeric_personal=@cnp,data_raspuns=@data,
id_intrebare=2,ip_user=@ip,id_sesiune=@idsesiune
WHERE id_intrebare=@keyID
END
现在您的代码以这种方式简化了
try
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["chestionar"].ConnectionString);
con.Open();
SqlCommand cmd = new SqlCommand("UpsertRasPunsuri",con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@keyID", 2);
cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]);
cmd.Parameters.AddWithValue("@raspuns", textbox2.Text);
cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime());
cmd.Parameters.AddWithValue("@ip", ip);
cmd.Parameters.AddWithValue("@idsesiune", id_sesiune);
con.Open();
cmd.ExecuteNonQuery();
Response.Redirect("User3.aspx");
}
catch (Exception ex)
{
Console.WriteLine("Error:" + ex);
}
finally
{
con.Close();
}
当然,我在您的表上,列的类型和长度上做了很多假设。
但是,这将相对容易适应。 现在,如果您从VS或SSMS运行存储过程,则可以排除数据访问代码中的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.