【问题标题】:C# ASP.NET TSQL Code Behind Upgrade DB升级数据库背后的 C# ASP.NET SQL 代码
【发布时间】:2013-07-25 02:01:56
【问题描述】:

我正在尝试根据用户的输入升级数据库,但它不起作用...

我正在使用这个:

 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 sql-server tsql upgrade


    【解决方案1】:

    我会改变你的方法如下

    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. 添加了输入验证,会话值可以为空,最好在更新数据库之前检查
    2. 创建SqlCommand时可以给连接,不需要重新设置
    3. 确保您的 SQL 有效
    4. 对一次性对象使用using 语句,例如SqlConnection, SqlCommand

    【讨论】:

    • 现在我看到“1 Dati aggiornati con successo!”
    • @DanieleNekoLuciani 1 表示数据库中的一行更新成功。
    • 但是数据库里没有这个更新!名字还是以前的“Daniele”,我写的是“Clorinda”
    • 您检查的数据库是否正确?能给个连接字符串吗?
    • 抱歉迟到了。然而现在它走了!在我们的方法之前我有一个错误的命令^^
    【解决方案2】:

    您的代码看起来不错。只要确保按照 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
    }
    

    【讨论】:

      【解决方案3】:

      先打开你的连接

      con.Open();

      ncmd.Connection = con;

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-11
        • 1970-01-01
        • 1970-01-01
        • 2014-04-05
        • 2011-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多