2014-07-13 39 views
-1

我只想日期发送到一个存储过程,我写了这个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(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溢出。必须介于1/1/1753 12:00:00 AM和12/31/9999 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 

问题出在哪里?

+0

我建议你看看DateTime.Parse和DateTime.TryParse方法。 – B0Andrew

+1

当您调试您的应用程序时,这两个参数的值是什么? –

+0

例如30/6/1390 12:00:00 AM – nimaSadeghpour

回答

1

错误消息提到1/1/1753的下限,所以,假设您已经正确解析了您的输入(30/6/1390),该消息似乎清楚地表明该列start_dateend_date是类型为datetime,其下限为1/1/1753。

因此,存储日期与一年不到1753,你需要一个datetime2date列有1/1/0001

Here a quick reference两个数据类型

下限还有一个问题在你的代码中。您可以将这些参数添加到数组中,而无需指定它们的SqlDbType,并以这种方式将Date添加为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()); 
} 
+0

好的,但在商店程序中,我们没有这个。不工作。 – nimaSadeghpour

+0

存储过程接收'date'参数,但两个数据表列“start_date”和“end_date”的数据类型是什么? – Steve

+0

我将它们更改为datetime2但未起作用 – nimaSadeghpour