count然后插入else更新

时间:2012-03-13 20:12:11

标签: c# asp.net sql

我有以下代码,我正在尝试进行计数,如果(计数)== 0而不是插入其他更新。我似乎无法弄清楚出了什么问题。页面应该转到下一页如果查询完成但页面只重新加载并且没有插入或更新数据。当我按下按钮时应该执行此操作。您可以帮助我吗?我之前问过但没有回答。我现在尝试了自己,但似乎看不出有什么问题。请重复

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

            }

1 个答案:

答案 0 :(得分:3)

当我遇到这种情况时,我将恢复存储过程。

    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运行存储过程,则可以排除数据访问代码中的错误。

相关问题