从ASP.Net/VB.Net中的存储过程返回日期

时间:2010-06-04 09:47:11

标签: asp.net vb.net stored-procedures date

我想在VB.Net上执行一个方法来返回存储过程中的日期。我尝试使用ExecuteScalar,但它没有工作,它重新出现错误

'不允许从数据类型datetime到int的隐式转换。使用CONVERT函数运行此查询“

请帮助任何帮助吗?

谢谢

下面是代码

  Public Function GetHolidaydate(ByVal struserID as String) As DateTime

        Dim objArgs1 As New clsSQLStoredProcedureParams

        objArgs1.Add("@userID", Me.Tag)
        objArgs1.Add("@Date", 0, 0, ParameterDirection.Output)

        Return (CDate(ExecuteScalar(clsLibrary.MyStoredProcedure.GetHolidayDate, objArgs1)))

End Function

3 个答案:

答案 0 :(得分:0)

我认为你的问题就在这里:

objArgs1.Add("@Date", 0, 0, ParameterDirection.Output)

你正在添加0,它们应该是typeOf DateTime。

修改

Public Function GetHolidayDate(ByVal struserID as String) AS DateTime
    Dim con As New SqlConnection(yourSQLConnectionString)
    Dim cmd As New SqlCommand
    Dim date As DateTime    

    con.Open()
    cmd.Connection = con
    cmd.CommandType = CommandType.StoredProcedure
    cmd.CommandText = "yourStoredProcedureName"
    cmd.Parameters.Add("@userID", Me.Tag)
    cmd.Parameters("@Date").Direction = ParameterDirection.Output
    cmd.ExecuteScalar()
    date = cmd.Parameters("@Date").Value
    con.Close()

    Return date
End Function

答案 1 :(得分:0)

看起来你得到的错误是SQL错误而不是VB.Net错误。您是否尝试将某个日期时间转换为某个int? 您可以尝试运行ExecuteNonQuery()方法来查看是否收到相同的错误。

您还可以运行SQLProfiler并查看正在运行的SQL。 然后,您可以尝试运行此SQL是SQL Server Management Studio

答案 2 :(得分:0)

你添加了两个参数 - 但是你说它应该返回后一个参数?

所以一定是

date DateTime = cmd.ExecuteScalar()
REM date = cmd.Parameters("@Date").Value
con.Close()