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:
- You want to use
System.DateTime.Now
, notSystem.DateTime.Now.ToString()
since the parameter is of theDateTime
datatype. - You can't directly pass
null
to a database server, if you wantnull
you need to useDBNull.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().
精彩评论