【发布时间】:2014-10-08 08:20:34
【问题描述】:
stackoverflow 的朋友们,
我在这里写了一个问题,因为我无法检测为什么有时读取数据读取器的字段会返回无效的强制转换异常。 我会提供所有可能的信息来了解我的情况。我正在使用 ASP.NET 3.5
-
我有一个模块,它有一个返回 IDataReader 并接收 sql 查询的函数。像这样的
function get_dr(query as String) as IDataReader dim connection = new SqlClient.SqlConnection("connection string") connection.open() dim command = connection.createCommand command.commandText = query dim reader = command.executeReader(CommandBehavior.CloseConnection) return reader end function -
我有一个带有共享函数的类,它可以恢复一个新的 dataReader 并返回一个日期。像这样:
public shared function getDate() as Date using dr = get_dr("SELECT dbo.getDate()") if dr.read() and dr(0) isnot dbnull.value then return dr.GetDateTime(0) end if end using end function
当我在另一个代码中调用 getDate() 函数时,它会给我一个像这样的调用堆栈。
System.InvalidCastException: Specified cast is not valid.
at System.Data.SqlClient.SqlBuffer.get_DateTime()
at System.Data.SqlClient.SqlDataReader.GetDateTime(Int32 i)
为什么有时我会收到此错误?我在想这是因为很多用户将这个函数与我的应用程序的另一个函数一起调用(这些函数最终也使用 get_dr),将 dataReader 的数据混合到另一个执行中,但我需要知道我是否在做出了点问题,或者可能做得更好。
注意事项:
- dbo.getDate 是一个总是返回日期的 sql 函数。
- 不要担心编写不好的代码,这些只是示例,但它们具有理解场景的必要性。
- 抱歉我的英语不好
真的提前谢谢了。
【问题讨论】:
标签: sql asp.net module datareader .net