Sql 向存储过程发送日期时间值
我只想将日期发送到存储过程,我编写了以下C代码:Sql 向存储过程发送日期时间值,sql,sql-server,c#-4.0,stored-procedures,Sql,Sql Server,C# 4.0,Stored Procedures,我只想将日期发送到存储过程,我编写了以下C代码: string[] pr = { "/" }; string[] s = txtStartDate.Text.Split(pr, StringSplitOptions.None); term.Start_date = new DateTime(Convert.ToInt32(s[0]), Convert.ToInt32(s[1]), Convert.ToInt32(s[2])).Date; s = txtEndDate.Text.Split(p
string[] pr = { "/" };
string[] s = txtStartDate.Text.Split(pr, StringSplitOptions.None);
term.Start_date = new DateTime(Convert.ToInt32(s[0]), Convert.ToInt32(s[1]), Convert.ToInt32(s[2])).Date;
s = txtEndDate.Text.Split(pr, StringSplitOptions.None);
term.End_date = new DateTime(Convert.ToInt32(s[0]),Convert.ToInt32(s[1]),Convert.ToInt32(s[2])).Date;
我将其发送到存储过程,如下所示:
public bool AddNewTerm(Term term)
{
SqlParameter[] parameters = new SqlParameter[]
{
new SqlParameter ("@termName",term.TermName),
new SqlParameter ("@start_date",term.Start_date),
new SqlParameter ("@end_date",term.End_date)
};
return SqlDBHelper.ExecuteNonQuery("AddNewTerm", CommandType.StoredProcedure, parameters);
}
但当它转到存储过程时,请说:
SqlDateTime溢出。必须在1753年1月1日12:00:00 AM和9999年12月31日11:59:59 PM之间
我看到了其他话题,但他们帮不了我
这是存储过程代码:
ALTER PROCEDURE dbo.AddNewTerm
(
@termName varchar(50),
@start_date date,
@end_date date
)
AS
insert into term(termName, start_date, end_date)
values(@termName, @start_date, @end_date)
RETURN
问题出在哪里?错误消息谈到了1/1/1753的下限,因此,假设您已正确解析输入30/6/1390,则该消息似乎清楚地表明两列开始日期和结束日期的类型为DateTime,其下限为1/1/1753 因此,要存储年份小于1753的日期,需要datetime2或date列的下限为1/1/0001 对于这两种数据类型 代码中还有另一个问题。将参数添加到数组中而不指定它们的SqlDbType,这样,日期就被添加为DateTime参数,当然不能接受低于1/1/1753的值。您的特定代码的解决方案可能是
public bool AddNewTerm(Term term)
{
List<SqlParameter> parameters = new List<SqlParameter>()
{
new SqlParameter("@termName",SqlDBType.VarChar, 50) {Value = term.TermName},
new SqlParameter("@start_date",SqlDBType.DateTime2, 0) {Value = term.Start_Date},
new SqlParameter("@end_date",SqlDBType.DateTime2, 0) {Value = term.End_Date},
};
return SqlDBHelper.ExecuteNonQuery("AddNewTerm", CommandType.StoredProcedure, parameters.ToArray());
}
我通过改变我的方式找到我的答案
我使用并存储了varchar。我建议您查看DateTime.Parse和DateTime.TryParse方法。当您调试应用程序时,这两个参数的值是什么?例如30/6/1390 12:00:00 AMB0Andrew:for DateTime.Parse说同样的错误。1390?您需要datetime2列存储过程接收日期参数,但两个datatable列start_date和end_date的数据类型是什么?Steve:SqlDateTime溢出。必须在1753年1月1日12:00:00 AM和9999年12月31日11:59:59 PM之间。我是通过更改方式找到的。我使用波斯日历类并通过varchar存储它们。存储日期时间的方法不正确。如果您需要搜索该列,会发生什么情况?一团糟。不过我明白你的问题。这是构建参数的方式。如果不指定类型,将创建DateTime类型而不是DateTime2的参数。我将用我的发现更新答案