开发者

C# if statement with dropdownlist.selectedvalue

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 = ddlPri开发者_运维技巧ority.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. 


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;
} 


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


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().

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜