1

これをデバッグするのを手伝っていただければ幸いです。以下に定義されているストアド プロシージャがあります。

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 を実行し、指定された有効値を渡します。

 [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));
        }

私が抱えている問題は、コードを実行すると、次の例外が発生することです

指定されたキャストは有効ではありません

このエラーは改行時にスローされます((int)(result.ReturnValue)); どのタイプがどこに欠けているのか完全にはわかりません。本当に、これを理解する助けがあれば大歓迎です。前もって感謝します。

4

3 に答える 3

0

ここでは使用できません。

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

http://msdn.microsoft.com/en-us/library/yz2be5wk.aspxを参照して ください

あるべき

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

ただし、result.ReturnValue が null の場合も例外がスローされます。

より安全

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

または明示的にnullのresult.ReturnValueをチェックしてください

于 2013-04-04T19:47:29.750 に答える
0

ストア プロシージャを呼び出すときは、次のようにしてください。

ObjectResult<Nullable<int>> tmp;

tmp = GetValidPaymentBoxNumberLogID_Test (...

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

あるいは単に

int identity = Convert.ToInt32(GetValidPaymentBoxNumberLogID_Test (...).FirstOrDefault());
于 2013-04-06T13:34:19.003 に答える
0

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

文字列を int としてキャストしようとしているように見えますか?

于 2013-04-04T18:22:05.217 に答える