views:

56

answers:

3

so I am connecting a sql database. I have a asp.net page and when the user selects the dropdownlist for status and selects the value to Closed, Then clicks update ticket button, i need it to take update the Closed_date column in the table.

my table has the column Closed_Date type datetime. I have a stored procedure that updates that column based on ticket #.

here is where I am having trouble:

        con = new SqlConnection(_strConStr);
        cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "iz_sp_updateticket";
        cmd.Parameters.Add(new SqlParameter("@Priority", SqlDbType.Int)).Value = ddlPriority.SelectedValue;
        cmd.Parameters.Add(new SqlParameter("@Status", SqlDbType.VarChar, 50)).Value = ddlStatus.SelectedValue;
        cmd.Parameters.Add(new SqlParameter("@Environment", SqlDbType.VarChar, 50)).Value = ddlEnv.SelectedValue;
        cmd.Parameters.Add(new SqlParameter("@Info", SqlDbType.VarChar)).Value = txtMessage.Text;
        cmd.Parameters.Add(new SqlParameter("@Ticket", SqlDbType.Int)).Value = txtTicket.Text;
        if (ddlStatus.SelectedValue == "Closed")
        {
            cmd.Parameters.Add(new SqlParameter("@Status", SqlDbType.VarChar, 50)).Value = ddlStatus.SelectedValue;
            cmd.Parameters.Add(new SqlParameter("@Closed_Date", SqlDbType.DateTime)).Value = System.DateTime.Now;
        }
        else
        {
            cmd.Parameters.Add(new SqlParameter("@Status", SqlDbType.VarChar, 50)).Value = ddlStatus.SelectedValue;
            cmd.Parameters.Add(new SqlParameter("@Closed_Date", SqlDbType.DateTime)).Value = DBNull.Value;
        } 

        con.Open();
        cmd.ExecuteNonQuery();

Here is my Stored Procedure:

CREATE procedure [dbo].[iz_sp_updateticket]
    @Ticket int,
    @Priority varchar(50),
    @Status varchar(50),
    @Environment varchar(50),
    @Info varchar(max),
    @Closed_date datetime
as
    UPDATE stotickets
    SET 
        Priority = @Priority,
        [Status] = @Status,
        Environment = @Environment,
        Info = @Info,
        Closed_date = @Closed_date
    WHERE Ticket = @Ticket

ERROR

Procedure or function iz_sp_updateticket has too many arguments specified. 
A: 

What's the error you're getting?

Offhand, I see a possible issue: you want to use System.DateTime.Now, not System.DateTime.Now.ToString().

Josh Wolf
error: Procedure or function iz_sp_updateticket has too many arguments specified.
IGor
+1  A: 

Although, most likely not the root of your problem, I think you're going overboard in adding your parameter values. Why not just use the AddWithValue method. SQL are smart enough to understand what value type you are trying to pass in based on the type of the value defined in the procedure. e.g.

    if (ddlStatus.SelectedValue == "Closed") 
    { 
        cmd.Parameters.AddWithValue("@Status",ddlStatus.SelectedValue); 
        cmd.Parameters.AddWithValue("@Closed_Date",System.DateTime.Now); 
    } 
    else 
    { 
        cmd.Parameters.Add("@Status",ddlStatus.SelectedValue); 
        cmd.Parameters.Add("@Closed_Date", null); 
    }  

On a side note, you can avoid adding the @Closed_Date, null in your C# command, by simply setting up your stored procedure to set the value to null within the procedure itself. Then it becomes optional. e.g.

CREATE PROCEDURE myProcedure
  @Status VARCHAR(255),
  @Closed_Date DATETIME = null
AS
BEGIN
  -- Do something
END
George
+3  A: 

Two potential things without knowing more about the issue:

  1. You want to use System.DateTime.Now, not System.DateTime.Now.ToString() since the parameter is of the DateTime datatype.
  2. You can't directly pass null to a database server, if you want null you need to use DBNull.Value.

The code would look something like this:

if (ddlStatus.SelectedValue == "Closed")
{
 cmd.Parameters.Add(new SqlParameter("@Status", SqlDbType.VarChar, 50)).Value =
         ddlStatus.SelectedValue;
 cmd.Parameters.Add(new SqlParameter("@Closed_Date", SqlDbType.DateTime)).Value =
         System.DateTime.Now;
}
else
{
 cmd.Parameters.Add(new SqlParameter("@Status", SqlDbType.VarChar, 50)).Value =
         ddlStatus.SelectedValue;
 cmd.Parameters.Add(new SqlParameter("@Closed_Date", SqlDbType.DateTime)).Value =
         DBNull.Value;
} 
Joshua
this didnt work for me. error: Procedure or function iz_sp_updateticket has too many arguments specified.
IGor
NVM this worked! i just saw that i have two status updates
IGor