首页  »   VB Dotnet

SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:

网友分享于:2013-12-15  浏览:234次
存储过程中如何传递日期型参数,麻烦高手指点一下,谢谢!
我有一个存储过程,用来从数据源表中取出符合参数传递日期的数据到另一临时表中,这个日期是用户从界面上的组合框中选择的,而组合框里的数据通过数据绑定到一个查询视图(在查询视图中,有两列数据,一列是在组合框里显示的××××年××月,另一列是用来取得第一列数据的源数据)中取到。

当用户选择组合框里的一个日期时,通过数据读取器取到对应的源数据,并用一个日期型变量把这个数据保存起来。

然后通过传递这个日期型数据到存储过程中,得到从数据源中取到这个日期的记录的目的。具体代码如下:

但每次执行时,都提示以下错误:

SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。

SQL code
ALTER PROCEDURE dbo.distribute_base
(
        @kaohe_term datetime        
    )

AS
begin
    select * into basedist_end_temp from basedist_end_product_sort where kaohe_term=@kaohe_term
end    
    RETURN 



VB.NET code

 '以下代码从组合框中获取所选考核期间对应的考核具体时间
        Dim kaohe_term As DateTime

        Dim cn As SqlClient.SqlConnection = New SqlClient.SqlConnection("workstation id=WANGQIANG;packet size=4096;user id=sa;" & _
        "password=120979120979;data source=WANGQIANG;persist security info=False;initial catalog=assessonline")

        If cn.State = ConnectionState.Closed Then
            cn.Open()
        End If

        Dim sqltime As SqlClient.SqlCommand = New SqlClient.SqlCommand("select distinct 所属期间,kaohe_term from " & _
        "kaohe_term where kaohe_term='" & Me.select_kaoheterm.SelectedValue & "'", cn)

        Dim sqlreader As SqlClient.SqlDataReader
        sqlreader = sqltime.ExecuteReader()

        Do While sqlreader.Read
            kaohe_term = sqlreader("所属期间")
        Loop
        sqlreader.Close()

        Response.Write(kaohe_term.GetType().Name)

        Response.Write(" <script> alert('" & Me.select_kaoheterm.SelectedValue & "') </script> ")
        '以下代码在生成数据前先删除所选考核期内生成的历史数据
        Dim datamatching As SqlClient.SqlCommand = New SqlClient.SqlCommand("delete from projectexpense_matching where kaohe_term='" & kaohe_term & "'", cn)

        datamatching.ExecuteNonQuery()

        Dim datanomatching As SqlClient.SqlCommand = New SqlClient.SqlCommand("delete from projectexpense_nomatching where kaohe_term='" & kaohe_term & "'", cn)

        datanomatching.ExecuteNonQuery()

        'Response.Write("<script>alter('" & kaohe_term & "')</script>")
        '以下代码为整理分摊率数据表   表名:basedist_end_temp  

        sqlcmddistribute_base.Connection = cn
        sqlcmddistribute_base.CommandType = CommandType.StoredProcedure
        sqlcmddistribute_base.CommandText = "distribute_base"
        sqlcmddistribute_base.Parameters("@kaohe_term").Value = kaohe_term
        'sqlcmddistribute_base.Parameters("@expense_name").Value = Me.Select1.Value
        Dim SprocResults As SqlClient.SqlDataReader
        If cn.State = ConnectionState.Closed Then
            cn.Open()
        End If
        SprocResults = sqlcmddistribute_base.ExecuteReader()      '程序执行到这里时总报错,说数据类型不对
        SprocResults.Close()



------解决方案--------------------
sqlserver中,时间字符串就可以了,你把你传得时间打印出来看看,直接在查询分析器中执行那段sql语句,应该没问题的
------解决方案--------------------
CONVERT(varchar, getdate(), 120 ) 可以将日期转换为如下格式:
2004-09-12 11:06:08 

先调试传至存储过程的参数的内容及格式,试试看能不能用上面的函数转换

相关解决方案

最新解决方案