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"没有更改,为什么?感谢之前的回答^^

C#ASP.NET TSQL代码隐藏升级数据库

我会将您的方法更改为以下

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");
  1. 添加了输入验证,会话值可以为null,最好在更新数据库之前进行检查
  2. 当您创建SqlCommand时,您可以提供连接,无需再次设置
  3. 确保您的SQL有效
  4. 对像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;

希望它能帮助