C#ASP.NET TSQL代码隐藏升级数据库
本文关键字:数据库 隐藏 代码 NET TSQL C#ASP | 更新日期: 2023-09-27 18:24:43
我正试图根据用户的输入升级数据库,但它不起作用。。。
我使用的是:
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(strcon);
SqlCommand cmd = new SqlCommand();
SqlCommand ncmd = new SqlCommand("Update Utenti Set Nome = @vnome where [Indirizzo E-Mail]=@vem", con);
ncmd.Parameters.AddWithValue("@vem", Session["[Indirizzo E-Mail]"].ToString());
ncmd.Parameters.AddWithValue("@vnome", TextBox2.Text);
ncmd.Connection = con;
con.Open();
ncmd.ExecuteNonQuery();
con.Close();
Label2.Text = "Dati aggiornati con successo!";
Response.Redirect("~/ModificaDati.aspx");
}
当我点击按钮时,它会显示Label2文本,但在数据库中"Nome"没有更改,为什么?感谢之前的回答^^
我会将您的方法更改为以下
if (Session["[Indirizzo E-Mail]"] != null &&
!string.IsNullOrEmpty(Session["[Indirizzo E-Mail]"].ToString()) &&
!string.IsNullOrEmpty(TextBox2.Text))
{
string vem = Session["[Indirizzo E-Mail]"].ToString();
using (var con = new SqlConnection(strcon))
using (var ncmd = new SqlCommand("Update Utenti Set Nome = @vnome where [Indirizzo E-Mail]=@vem", con))
{
con.Open();
ncmd.Parameters.AddWithValue("@vem", vem);
ncmd.Parameters.AddWithValue("@vnome", TextBox2.Text);
int rows = ncmd.ExecuteNonQuery();
Label2.Text = rows + " Dati aggiornati con successo!";
}
}
Response.Redirect("~/ModificaDati.aspx");
- 添加了输入验证,会话值可以为null,最好在更新数据库之前进行检查
- 当您创建
SqlCommand
时,您可以提供连接,无需再次设置 - 确保您的SQL有效
- 对像
SqlConnection, SqlCommand
这样的一次性对象使用using
语句
您的代码看起来不错。只需确保按照Damith的建议检查SQL是否正确即可。
我建议的另一件事是在执行查询之前,额外验证参数的数据类型正确性。使用这种方法,您可能会避免许多不必要的异常,并且能够提供更用户友好的消息。当然,这只适用于用户输入为非文本类型的情况
//Data Type verification
DateTime tmp;
if (!DateTime.TryParse(Label2.Text.Trim(), out tmp))
{
//Show error message that this is not a correct data type
}
首先打开连接
con.Open();
ncmd.Connection=con;
希望它能帮助