我正在尝试使用SqlCommand更新MSSQL表,我认为这是我的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)
答案 0 :(得分:5)
UPDATE FROM语法无效(编辑:OP更正了这一点)。问题可能还有“text
”列。 text
是SQL Server中的关键字,因为它是一种数据类型。尝试在它周围放置括号。
UPDATE yak_tickets
SET email = @emailParam,
subject = @subjectParam,
[text] = @textParam,
statusid = @statusIDParam,
ticketClass = @ticketClassParam
WHERE id = @ticketIDParam
答案 1 :(得分:2)
必须使用if(!Page.IsPostBack)
答案 2 :(得分:1)
几个问题:
答案 3 :(得分:0)
听起来您的托管服务提供商限制了您的调试选项,迫使您以旧式方式执行此操作。如果在更新后立即提出类似的内容,那该怎么办?
;SELECT @@ROWCOUNT
然后执行ExecuteScalar而不是ExecuteNonQuery,看看SQL是否认为它更新了任何内容。