指定的Cast无效

时间:2013-04-04 18:16:33

标签: c# sql linq entity-framework

我很感激请帮助调试一下。我有一个如下定义的存储过程

ALTER PROCEDURE [dbo].[usp_ProcessBoxNumberPaymentInfo_Test]
    -- Add the parameters for the stored procedure here
     @boxNumber int, 
     @ProcessDate DateTime,
     @BoxType Varchar(50),
     @PaymentProcessDate DateTime,
     @Identity int OUTPUT  

BEGIN 
    Declare @NewID as int 
  -- INSERT CODE GOES HERE

   Set @NewID = SCOPE_IDENTITY()
  -- ANOTHER INSERT CODE GOES HERE
       SELECT @Identity = SCOPE_IDENTITY()  

END

在代码方面,我在DataContext类中使用以下方法来执行我的storedproc,并传递指定的valid。

 [global::System.Data.Linq.Mapping.FunctionAttribute(Name = "dbo.usp_ProcessBoxNumberPaymentInfo_Test")]
        public int GetValidPaymentBoxNumberLogID_Test(
            [global::System.Data.Linq.Mapping.ParameterAttribute(Name = "boxNumber", DbType = "Int")] string boxNumber,
            [global::System.Data.Linq.Mapping.ParameterAttribute(Name = "ProcessDate", DbType = "DateTime")] DateTime ProcessDate,
            [global::System.Data.Linq.Mapping.ParameterAttribute(Name = "BoxType", DbType = "VarChar(50)")] string BoxType,
            [global::System.Data.Linq.Mapping.ParameterAttribute(Name = "PaymentProcessDate", DbType = "DateTime")] DateTime PaymentProcessDate,
            [global::System.Data.Linq.Mapping.ParameterAttribute(Name = "Identity", DbType = "Int")] ref System.Nullable<int> identity)
        {
            IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), boxNumber, ProcessDate, BoxType, PaymentProcessDate, identity);
            identity = ((System.Nullable<int>)(result.GetParameterValue(4)));
            return ((int)(result.ReturnValue));
        }

我遇到的问题是当我运行代码时,我得到以下异常

指定的Cast无效

此行引发错误返回((int)(result.ReturnValue)); 我不完全确定缺少哪种类型以及在哪里。真的,任何帮助解决这个问题将非常感激。提前致谢。

3 个答案:

答案 0 :(得分:0)

(Name = "boxNumber", DbType = "Int")] string boxNumber

看起来你正在尝试将字符串转换为int?

答案 1 :(得分:0)

你不能在这里使用取消装箱:

return ((int)(result.ReturnValue));

http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx

Shoul be

return ((Int32.Parse(result.ReturnValue));

但是如果result.ReturnValue为null,它也会抛出异常。

安全

int a=0;
Int32.TryParse(result.ReturnValue, out a);
return a;

或检查result.ReturnValue显示空值

答案 2 :(得分:0)

当你调用商店程序时,试试这个:

ObjectResult<Nullable<int>> tmp;

tmp = GetValidPaymentBoxNumberLogID_Test (...

int identity = Convert.ToInt32(tmp.FirstOrDefault());

或只是

int identity = Convert.ToInt32(GetValidPaymentBoxNumberLogID_Test (...).FirstOrDefault());