Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用CLR存储过程时出现System.InvalidCastException_C#_Stored Procedures_Clrstoredprocedure - Fatal编程技术网

C# 调用CLR存储过程时出现System.InvalidCastException

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.

我正在尝试在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.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);