繁体   English   中英

计数,然后插入其他更新[关闭]

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM