5

我正在尝试使用 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)
4

4 回答 4

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
于 2009-12-19T22:50:50.640 回答
2

不得不使用 if(!Page.IsPostBack)

于 2009-12-28T00:57:34.767 回答
1

几个问题:

  1. 这是在回滚的事务中吗?
  2. 您是否已验证您的 @ticketIDParam 与表中的一组行匹配?特别是如果它不仅仅是一个整数键
  3. 您是否正在更新没有副作用的行(即更新到相同的值)?
  4. 你能提供这个查询的参数吗?添加语句
  5. 桌子上是否有触发器或其他设置(我假设没有,因为您没有提及任何内容)。
  6. 你说你知道参数工作正常,你能说你是如何验证的吗?(轮廓仪、目视检查等)。
于 2009-12-19T23:03:44.190 回答
0

听起来您的托管服务提供商限制了您的调试选项,迫使您以老式的方式进行。如果在更新后立即输入以下内容怎么办:

;SELECT @@ROWCOUNT

然后代替 ExecuteNonQuery,执行 ExecuteScalar,看看 SQL 是否认为它更新了任何东西。

于 2015-10-13T14:01:12.597 回答