C# 调用CLR存储过程时出现System.InvalidCastException
我正在尝试在Visual Studio 2012中调试CLR存储过程。调用时,会发生此错误,并且不会调用CLR存储过程:C# 调用CLR存储过程时出现System.InvalidCastException,c#,stored-procedures,clrstoredprocedure,C#,Stored Procedures,Clrstoredprocedure,我正在尝试在Visual Studio 2012中调试CLR存储过程。调用时,会发生此错误,并且不会调用CLR存储过程: A .NET Framework error occurred during execution of user-defined routine or aggregate "CalculateResultByUser": System.InvalidCastException: No se puede convertir un objeto de tipo 'System.
A .NET Framework error occurred during execution of user-defined routine or aggregate "CalculateResultByUser":
System.InvalidCastException: No se puede convertir un objeto de tipo 'System.Data.SqlTypes.SqlInt32' al tipo 'System.IConvertible'.
System.InvalidCastException:
en System.Convert.ToInt32(Object value)
en StoredProcedures.CalculateResultByUser(SqlInt32 idUsuario, SqlDateTime fechaInicio, SqlDateTime fechaFin)
这是CLR存储过程定义:
[Microsoft.SqlServer.Server.SqlProcedure]
public static void CalculateResultByUser(SqlInt32 idUsuario, SqlDateTime fechaInicio, SqlDateTime fechaFin)
{
}
我试着这样称呼它:
EXEC CalculateResultByUser 5, '2014-07-26 00:00:00', '2014-07-26 23:59:59'
需要帮忙吗?
谢谢
Jaime肯定没有实现
我猜您正在调用存储过程中的某个地方,以从SqlInt32中提取整数值-这将不起作用,因为此结构未实现此接口
它确实有一个:
或者
int? nId = (idUsuario.IsNull ? (int ?)null : (int)idUsuario);
你能用这个吗 你能翻译错误信息吗?我们大多数人经常用英语阅读它们。。。我可以自己翻译。。。我甚至可以猜测消息是说
SqlInt32
不是实现IConvertible
。但是我认为这是您的责任,同时向我们展示CalculateResultByUser
(或简化版)的代码。我没有展示更多细节,因为存储过程实际上没有被调用。这就是困难所在。。我无法调试它。如果没有调用它,我会猜测发送到该方法的实际上是Int32
(不是SqlInt32
),并且运行时正在尝试将Int32
(参数)转换为SqlInt32
(参数),但失败了。未调用存储过程,所以问题不在于身体,而在于调用。我意识到了这一点,因为我在身体的最开始处设置了一个断点,但从未到达。调试时,执行在项目中的SQL文件处停止,该文件包含EXEC指令。当我按F11继续执行时,立即显示该错误。查看引发异常的位置的建议:在引发System.InvalidCastException时使用中断;谢谢问题是你在帖子里写了什么。我有:“intuserid=idUsuario”。因为idUsuario永远不会为null,所以我将它改为:“int userId=idUsuario.Value”,它就工作了。我无法调试的问题是因为我没有在SQL Server对象资源管理器中选中“允许SQL/CLR调试”。当做
int? nId = (idUsuario.IsNull ? (int ?)null : (int)idUsuario);