我在asp页面中有这个方法,执行时没有错误,甚至没有更新。 我在这个没有更新表的方法中做错了什么?
protected void saveSettings()
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["sendyourmessageConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand();
string userName = "something";
try
{
cmd = new SqlCommand("UPDATE Tb_Registration SET Country = @Country, City = @City Where Username = @Username" , con);
cmd.Parameters.AddWithValue("@Username", SqlDbType.VarChar);
cmd.Parameters["@Username"].Value=userName;
cmd.Parameters.AddWithValue("@Country", SqlDbType.VarChar);
cmd.Parameters["@Country"].Value= txtCountry.Text.Trim();
cmd.Parameters.AddWithValue("@City", SqlDbType.VarChar);
cmd.Parameters["@City"].Value= txtCity.Text.Trim();
if (con.State == ConnectionState.Closed)
{
con.Open();
}
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
ScriptManager.RegisterStartupScript(this, this.GetType(), "Message", "alert('Error occured : " + ex.Message.ToString() + "');", true);
return;
}
finally
{
con.Close();
cmd.Dispose();
ScriptManager.RegisterStartupScript(this, this.GetType(), "Message", "alert('Your settings have been saved');", true);
}
}
答案 0 :(得分:2)
我认为问题是AddWithValue
方法。
它将参数值作为第二个参数,而不是SqlDbType
。
但是不再使用这种方法了。 可能会产生意外结果。使用.Add()
method及其超载。
阅读:Can we stop using AddWithValue()
already?
还可以使用using
statement来处置您的SqlConnection
和SqlCommand
。
using(SqlConnection con = new SqlConnection(connString))
using(SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = @"UPDATE Tb_Registration SET Country = @Country, City = @City
Where Username = @Username";
cmd.Parameters.Add("@Username", SqlDbType.VarChar).Value = userName;
cmd.Parameters.Add("@Country", SqlDbType.VarChar).Value = txtCountry.Text.Trim();
cmd.Parameters.Add("@City", SqlDbType.VarChar).Value = txtCity.Text.Trim();
con.Open();
cmd.ExecuteNonQuery();
}
答案 1 :(得分:1)
您的问题在这里:cmd.Parameters.AddWithValue("@Country", SqlDbType.VarChar);
如果你使用AddWithValue
但更好的做法 - 根本不使用AddWithValue
,因为它可能会导致不同的问题。
而是使用类似的东西:
cmd.Parameters.Add("@Username", SqlDbType.VarChar).Value = userName;
答案 2 :(得分:1)
插入直接值而不是提供数据类型
protected void saveSettings()
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["sendyourmessageConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand();
string userName = "something";
try
{
cmd = new SqlCommand("UPDATE Tb_Registration SET Country = @Country, City = @City Where Username = @Username" , con);
cmd.Parameters.AddWithValue("@Username", userName);
cmd.Parameters.AddWithValue("@Country", txtCountry.Text.Trim());
cmd.Parameters.AddWithValue("@City", txtCity.Text.Trim());
if (con.State == ConnectionState.Closed)
{
con.Open();
}
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
ScriptManager.RegisterStartupScript(this, this.GetType(), "Message", "alert('Error occured : " + ex.Message.ToString() + "');", true);
return;
}
finally
{
con.Close();
cmd.Dispose();
ScriptManager.RegisterStartupScript(this, this.GetType(), "Message", "alert('Your settings have been saved');", true);
}
}
答案 3 :(得分:0)
AddWithValue的第二个参数是你的值而不是sql类型
cmd.Parameters.AddWithValue("@Username", userName);