C# 计数,然后插入else更新
我有下面的代码,我正在尝试进行计数,如果(计数)=0,则插入else更新。我似乎无法找出问题所在。如果查询完成,则该页应转到下一页,但该页仅重新加载,并且未插入或更新任何数据。此操作应在我按下按钮时执行。您能帮助我吗?我以前问过,但没有回答。我现在自己试过,但似乎看不出有什么问题。抱歉重复C# 计数,然后插入else更新,c#,asp.net,sql,C#,Asp.net,Sql,我有下面的代码,我正在尝试进行计数,如果(计数)=0,则插入else更新。我似乎无法找出问题所在。如果查询完成,则该页应转到下一页,但该页仅重新加载,并且未插入或更新任何数据。此操作应在我按下按钮时执行。您能帮助我吗?我以前问过,但没有回答。我现在自己试过,但似乎看不出有什么问题。抱歉重复 string ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (string.
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();
}
}
当我遇到这种情况时,我将返回到存储过程
创建过程UpsertRasPunsuri(@keyID int、@cnp int、@raspuns nvarchar(30),
@数据smalldatetime,@ip nvarchar(30),@idsesiune int)
作为
开始
声明@cnt int
从Raspunsuri中选择@cnt=count(*),其中id\u intrebare=@keyID
如果@cnt=0
插入Raspunsuri值(@raspuns、@cnp、@data、2、@ip、@idsesune)
其他的
更新Raspunsuri集
raspuns=@raspuns,cod\u numeric\u personal=@cnp,data\u raspuns=@data,
id_intrebare=2,ip_user=@ip,id_sesiune=@idsesune
其中id_intrebare=@keyID
结束
现在,您的代码以这种方式简化
试试看
{
SqlConnection con=新的SqlConnection(ConfigurationManager.ConnectionString[“chestionar”].ConnectionString);
con.Open();
SqlCommand cmd=新的SqlCommand(“UpsertRasPunsuri”,con);
cmd.CommandType=CommandType.storedProcess;
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(“@idsesune”,id_sesiune);
con.Open();
cmd.ExecuteNonQuery();
重定向(“User3.aspx”);
}
捕获(例外情况除外)
{
Console.WriteLine(“错误:+ex”);
}
最后
{
con.Close();
}
当然,我在这里对您的表格、列类型和长度做了很多假设。然而,这将相对容易适应。现在,如果从VS或SSMS运行存储过程,则可以排除数据访问代码中的错误 当我陷入这种情况时,我将恢复到存储过程
创建过程UpsertRasPunsuri(@keyID int、@cnp int、@raspuns nvarchar(30),
@数据smalldatetime,@ip nvarchar(30),@idsesiune int)
作为
开始
声明@cnt int
从Raspunsuri中选择@cnt=count(*),其中id\u intrebare=@keyID
如果@cnt=0
插入Raspunsuri值(@raspuns、@cnp、@data、2、@ip、@idsesune)
其他的
更新Raspunsuri集
raspuns=@raspuns,cod\u numeric\u personal=@cnp,data\u raspuns=@data,
id_intrebare=2,ip_user=@ip,id_sesiune=@idsesune
其中id_intrebare=@keyID
结束
现在,您的代码以这种方式简化
试试看
{
SqlConnection con=新的SqlConnection(ConfigurationManager.ConnectionString[“chestionar”].ConnectionString);
con.Open();
SqlCommand cmd=新的SqlCommand(“UpsertRasPunsuri”,con);
cmd.CommandType=CommandType.storedProcess;
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(“@idsesune”,id_sesiune);
con.Open();
cmd.ExecuteNonQuery();
重定向(“User3.aspx”);
}
捕获(例外情况除外)
{
Console.WriteLine(“错误:+ex”);
}
最后
{
con.Close();
}
当然,我在这里对您的表格、列类型和长度做了很多假设。然而,这将相对容易适应。现在,如果从VS或SSMS运行存储过程,则可以排除数据访问代码中的错误 有例外吗?
从Raspunsuri中选择count(*),其中id\u intrebare=2
是否返回任何行?如果不返回,我希望执行插入操作,否则更新..如果没有行,返回并进入更新部分。它不会抛出错误,但不会插入错误和数据。您的问题不清楚,是否已将此代码放入按钮单击处理程序中?SELECT查询返回什么,是否有异常/etc?是的..我输入了按钮事件,没有异常抛出..有异常吗?从Raspunsuri中选择count(*),其中id\u intrebare=2
是否返回任何行?如果不返回,我希望执行插入操作,否则更新..如果没有行,返回并进入更新部分。它不会抛出错误,但不会插入错误和数据。您的问题不清楚,是否已将此代码放入按钮单击处理程序中?SELECT查询返回什么,是否有异常/etc?是的..我输入了按钮事件,没有异常抛出..但没有过程?但没有过程?