C#使用SqlCommand.Parameters更新表

时间:2009-12-19 22:48:01

标签: c# sql sqlcommand sqlclient

我正在尝试使用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 个答案:

答案 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)

几个问题:

  1. 这是否会在事务中被回滚?
  2. 您是否确认@ticketIDParam与表格中的一组行匹配?特别是如果它不仅仅是一个整数键
  3. 您是否正在更新没有副作用的行(即您更新为相同的值)?
  4. 您能否提供此查询的paramaters.Add语句
  5. 桌子上是否有触发器或其他设置(我假设没有,因为你没有提及任何东西)。
  6. 你说你知道params工作正常,你能说你怎么验证这个吗? (剖析器,目视检查等)。

答案 3 :(得分:0)

听起来您的托管服务提供商限制了您的调试选项,迫使您以旧式方式执行此操作。如果在更新后立即提出类似的内容,那该怎么办?

;SELECT @@ROWCOUNT

然后执行ExecuteScalar而不是ExecuteNonQuery,看看SQL是否认为它更新了任何内容。