我有一个包含更新语句的存储过程。它需要3个参数:ID,状态,日期
我写了一个C#程序来调用这个程序。如果状态为-1,我希望表中的日期为空,如果状态为1,则日期应为当前日期。
Int32 rowsAffected = 0;
string datenow =null;
using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLConnectionString"].ConnectionString))
{
connection.Open();
SqlCommand cmd = new SqlCommand(
"usp_UpdateProc", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@status", SqlDbType.Int);
cmd.Parameters["@status"].Value = status;
if(status != 1)
datenow = DateTime.Now.ToString(@"MM\/dd\/yyyy h\:mm tt");
cmd.Parameters.AddWithValue("@datenow", @datenow);
cmd.Parameters.Add(
new SqlParameter("@ID", @ID));
try
{
rowsAffected = cmd.ExecuteNonQuery();
}
catch (Exception ep)
{ //throw ep
}
当我这样做时,状态和日期字段都是数据库中的空值。我不确定为什么会这样? 谢谢 Rashmi
答案 0 :(得分:1)
我会尝试分配这样的值,看看它是否有所作为:
SqlParameter stat = cmd.Parameters.AddWithValue("@status" ,status);
stat.dbType = SqlDbType.Int;
DateTime? dt = (status == -1)? null : DateTime.Now;
SqlParameter dateParam = cmd.Parameters.AddWithValues("@datenow", dt ?? DBNull.Value);
dateParam.dbType = SqlDbType.DateTime;
答案 1 :(得分:1)
我在您的代码中看到了一些问题:
请不要放置空的尝试/捕获并显示异常,以便您可以更好地查看出现了什么问题。
我建议:
SqlCommand cmd = new SqlCommand("usp_UpdateProc", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@status", status);
if(status == -1)
cmd.Parameters.AddWithValue("@datenow", DBNull.Value);
else
cmd.Parameters.AddWithValue("@datenow", DateTime.Now.ToString(@"MM\/dd\/yyyy h\:mm tt"));
cmd.Parameters.AddWithValue("@ID", @ID);
try
{
rowsAffected = cmd.ExecuteNonQuery();
}
catch (Exception ep)
{
MessageBox.Show(ep.ToString());
}