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

时间:2014-07-26 18:25:28

标签: 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.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'

请帮忙吗? 谢谢 海梅

1 个答案:

答案 0 :(得分:0)

果然,SqlInt32似乎没有实现IConvertible

我猜你的存储过程中某处正在调用Convert.ToInt32从SqlInt32中提取整数值 - 这不起作用,因为这个结构没有实现这个接口。

确实有explicit conversion

    int id = (idUsuario.IsNull ? -1 : (int)idUsuario);

或者

    int? nId = (idUsuario.IsNull ? (int ?)null : (int)idUsuario);
你能用吗?