views:

777

answers:

3

I'm trying to update an MSSQL table using SqlCommand, I think it's a syntax error with my T-SQL, but here is what I have so far:

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

The parameters are working as they should, however, the table never gets updated when I run the code. Any help would be appreciated =)

Here is the rest of the code:

    #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();
    }

And the method's signature:

  public static void updateTicketInDatabase(Ticket ticketToBeSubmitted, Label sqlErrorLabel, int ticketID)
+2  A: 

UPDATE FROM is invalid syntax (edit: OP corrected this). The problem might also be the "text" column. text is a keyword in SQL Server, since it's a datatype. Try putting brackets around it.

UPDATE yak_tickets 
SET email = @emailParam, 
    subject = @subjectParam, 
    [text] = @textParam, 
    statusid = @statusIDParam, 
    ticketClass = @ticketClassParam 
WHERE id = @ticketIDParam
womp
Yes, I put that in as a test, forgot to edit it out.
Yakattak
Oh, but it's still not working otherwise? Can we see more of the code?
womp
Might need clarifying - you can have a FROM clause in an UPDATE statement e.g. UPDATE t SET t.Field='Blah' FROM MyTable t WHERE t.Id = 1
AdaTheDev
Thanks Ada. I just noticed that right off the bat he had UPDATE FROM, which was invalid.
womp
@womp - yep, I was going the mention the same thing. I knew what you meant, just thought others might not :)
AdaTheDev
I just ran a quick test, text with no brackets worked in a simple context, so the statement seems valid. There must be a problem with your parameters or data types/length. Some things to check is that your columns are long enough to hold the parameters that you're passing in, and that the ID parameter isn't null.
womp
Okay, added the rest of the code.
Yakattak
I also fixed the [text] error, still won't update though >.<
Yakattak
Can you run a SQL profiler and watch the command execute? That would tell you the error at least.
womp
I don't have access to the command to do that =/ (Profiler)
Yakattak
A: 

Couple of questions:

  1. Is this inside of a transaction thats getting rolledback?
  2. Have you verified that you @ticketIDParam matches a set of rows on the table? Especially if its not just a integer key
  3. Are you updating rows that have no side effects (i.e. your updating to the same values)?
  4. Can you provide the paramaters.Add statements for this query
  5. Is there a trigger or other setting on the table (I assume not, as you did not mention anything).
  6. You said you know the params are working correctly, can you say how you verified this? (profiler, visual inspection, etc).
GrayWizardx
1.) No2.) Yes, the @ticketIDParam is sound, I've used it in other methods3.) I am updating rows that may have their values set to the same thing already, yes.4.) I added them above.5.) No triggers6.) The parameters are usually copy/pasted from the methods I made that /did/ work, however some needed some changes so their may be an error or two.
Yakattak
If you could get a profiler trace you can see exactly what is being sent. and try executing the same command on the server yourself (assuming you have access).
GrayWizardx
I wish I did, GoDaddy is very restrictive with such access =/
Yakattak
A: 

Had to use if(!Page.IsPostBack)

Yakattak