使用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
我正在阅读文化变体,但不知道如何解决这个问题。
答案 0 :(得分:4)
使用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;
}