简体   繁体   English

C#if语句具有dropdownlist.selectedValue

[英]C# if statement with dropdownlist.selectedvalue

so I am connecting a sql database. 所以我要连接一个SQL数据库。 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. 我有一个asp.net页,当用户选择状态的下拉列表并选择“已关闭”的值时,然后单击“更新票证”按钮,我需要它来更新表中的Closed_date列。

my table has the column Closed_Date type datetime. 我的表具有Closed_Date类型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. 

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. 您要使用System.DateTime.Now ,而不要使用System.DateTime.Now System.DateTime.Now.ToString()因为该参数属于DateTime数据类型。
  2. You can't directly pass null to a database server, if you want null you need to use DBNull.Value . 您不能直接将null传递给数据库服务器,如果要null ,则需要使用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. 为什么不只使用AddWithValue方法。 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. SQL足够聪明,可以根据过程中定义的值的类型来理解要尝试传递的值类型。 eg 例如

    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. 附带一提,您可以通过简单地设置存储过程以在过程本身中将值设置为null来避免在C#命令中添加@Closed_Date(空)。 Then it becomes optional. 然后,它变为可选。 eg 例如

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(). 暂时,我看到一个可能的问题:您要使用System.DateTime.Now,而不是System.DateTime.Now.ToString()。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM