将日期时间传递给存储过程

本文关键字:存储过程 日期 时间 | 更新日期: 2023-09-27 18:22:13

使用sql server 2012。我很难将日期参数传递给存储过程。表中列的数据类型为datetime

alter procedure savedate()
(
  @StartDate datetime
)

源文本框中的文本为2014-09-18。

下面的代码将给出一个错误字符串,该字符串未被识别为有效的日期时间

SqlParams[0] = new SqlParameter("@StartDate", SqlDbType.DateTime);
SqlParams[0].Value = Convert.ToDateTime(txtStartDate.Text.Trim());//error here

这会说-无法将参数值从字符串转换为日期时间

SqlParams[0] = new SqlParameter("@StartDate", SqlDbType.DateTime);
SqlParams[0].Value = txtStartDate.Text.Trim();
SqlHelper.ExecuteDataset(conn, CommandType.StoredProcedure, "savedate",
                         SqlParams); //error here

我正在阅读有关文化变体的文章,但不知道如何解决这个问题。

将日期时间传递给存储过程

使用DateTime.ParseExact将字符串转换为日期时间,然后传递日期时间

string test = "2014-09-18";
DateTime dt = DateTime.ParseExact(test, "yyyy-MM-dd", CultureInfo.InvariantCulture);
SqlParams[0] = new SqlParameter("@StartDate", SqlDbType.DateTime);
SqlParams[0].Value = dt;

如果您的输入来自用户键入的值,那么最好使用DateTime.TryParseExact来验证输入,而不会出现异常。

if(!DateTime.TryParseExact(test, "yyyy-MM-dd", 
             CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
{
    MessageBox.Show("Type a date in the format yyyy-MM-dd");
    return;
}