使用SqlCommand.Parameters进行C#更新表ASP.NET

可能重复:
C#使用SqlCommand.Parameters更新表

我正在尝试使用SqlCommand更新SQL Server表,我认为这是我的T-SQL的语法错误,但这是我到目前为止:

SqlCommand sqlCmd = new SqlCommand( "UPDATE yak_tickets SET email = @emailParam, subject = @subjectParam, text = @textParam, statusid = @statusIDParam, ticketClass = @ticketClassParam WHERE id = @ticketIDParam", sqlConn); 

这些参数正常工作,但是,当我运行代码时,表永远不会更新。 任何帮助将不胜感激=)

这是代码的其余部分:

  #region Parameters /* Parameters */ sqlCmd.Parameters.Add("@ticketIDParam", SqlDbType.BigInt); sqlCmd.Parameters["@ticketIDParam"].Value = ticketID; sqlCmd.Parameters.Add("@emailParam", SqlDbType.NVarChar); sqlCmd.Parameters["@emailParam"].Value = ticketToBeSubmitted.getEmail(); sqlCmd.Parameters.Add("@subjectParam", SqlDbType.NVarChar); sqlCmd.Parameters["@subjectParam"].Value = ticketToBeSubmitted.getSubject(); sqlCmd.Parameters.Add("@textParam", SqlDbType.Text); sqlCmd.Parameters["@textParam"].Value = ticketToBeSubmitted.getTicketContent(); sqlCmd.Parameters.Add("@statusIDParam", SqlDbType.NVarChar); sqlCmd.Parameters["@statusIDParam"].Value = ticketToBeSubmitted.getStatus(); sqlCmd.Parameters.Add("@ticketClassParam", SqlDbType.NVarChar); sqlCmd.Parameters["@ticketClassParam"].Value = ticketToBeSubmitted.getTicketClass(); #endregion #region Try/Catch/Finally /* Try/Catch/Finally */ try { sqlConn.Open(); sqlCmd.ExecuteNonQuery(); } catch (SqlException sqlEx) { sqlErrorLabel.Text = sqlEx.ToString(); sqlErrorLabel.ForeColor = System.Drawing.Color.Red; } finally { sqlConn.Close(); } 

并且该方法的签名:

  public static void updateTicketInDatabase(Ticket ticketToBeSubmitted, Label sqlErrorLabel, int ticketID) 

我通过一个分析器运行它,它的作用如下。

 Page Loads -> Audit Login: -- Sets a bunch of stuff (irrelevant) SQL:BatchStarting -- SELECT * from yak_tickets SQL:BatchCompleted -- SELECT * from yak_tickets Audit Logout Button Click Event -> RPC:Completed: -- exec sp_reset_connection Audit Login: -- Sets some more stuff SQL:BatchStarting -- SELECT * from yak_tickets SQL:BatchCompleted -- SELECT * from yak_tickets 

这是表单的代码隐藏文件。

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using YakStudios_Support.Includes; namespace YakStudios_Support.ys_admin { public partial class UpdateTicket : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { int ticketID = Convert.ToInt32(Request.QueryString["ticketID"]); // Grabs the ?ticketid number from the URL Ticket ticketBeingUpdated = TicketDatabase.selectTicketFromDatabase(sqlErrorLabel, 1); // Creates a new Ticket object to be used by the form to populate the text boxes /* Form Field Population */ // Email emailTxt.Text = ticketBeingUpdated.getEmail(); // Date Submitted dateSubText.Text = ticketBeingUpdated.getDateSubmitted().ToString(); // Ticket Class classDropDown.SelectedValue = ticketBeingUpdated.getTicketClass(); // Ticket Status statusDrop.SelectedValue = ticketBeingUpdated.getStatus(); // Subject subjectTxt.Text = ticketBeingUpdated.getSubject(); // Text textTxt.Text = ticketBeingUpdated.getTicketContent(); } protected void editBtn_Click(object sender, EventArgs e) { emailTxt.Enabled = true; dateSubText.Enabled = true; classDropDown.Enabled = true; statusDrop.Enabled = true; subjectTxt.Enabled = true; textTxt.Enabled = true; } protected void submitBtn_Click(object sender, EventArgs e) { int ticketID = Convert.ToInt32(Request.QueryString["ticketID"]); // Grabs the ?ticketid number from the URL DateTime convertedDate = Convert.ToDateTime(dateSubText.Text); Ticket ticketUpdated = new Ticket(emailTxt.Text, convertedDate, subjectTxt.Text, textTxt.Text, statusDrop.SelectedValue, classDropDown.SelectedValue); //Ticket ticketUpdated = new Ticket(emailTxt.Text, subjectTxt.Text, textTxt.Text, classDropDown.SelectedValue); Response.Write(TicketDatabase.updateTicketInDatabase(ticketUpdated, sqlErrorLabel, 1)); //Response.Redirect("ticketqueue.aspx"); } } } 

在我看来它正在做什么,是它再次运行我的select方法,这是它在页面加载时应该做的事情。 这是由按钮刷新页面引起的吗?

在ExecuteNonQuery上添加一个断点,检查你的sqlCommand对象,用sqlcommand查看参数,并确保将TicketId设置为你期望的值,因为你的更新是由ticketId驱动的,确保它被正确设置,或者尝试直接在SQL服务器上运行TSQL等价物,我的猜测是你的ticketId变量没有被设置,乍一看代码看起来很好。