2016-11-03 9 views
0

私のアプリケーション(VS2015、C#、WebForm)では、以前は(ローカルとプロダクションサーバーの両方で)完全に正常に動作していましたが、エラー:ObjectParameterがストアドプロシージャの出力値を取得しません

CREATE PROCEDURE [dbo].[StoredProcedure_Item_Insert] 
    @ItemText VARCHAR(250), 
    @InsertedID INT OUTPUT 

    INSERT INTO [dbo].[Item] ([ItemText]) 
    VALUES (@ItemText -- ItemText - varchar(250) 
      ); 

    SET @InsertedID = SCOPE_IDENTITY(); 

    SELECT @InsertedID AS InsertedID; 

リポジトリコード:

public int InsertItem(string itemText) 
{ 
     ObjectParameter InsertedId = new ObjectParameter("InsertedID", -1); 

     _db.StoredProcedure_Item_insert(feeText, InsertedId); 

     return (int)InsertedId.Value; 
} 

このストアドプロシージャの関数インポートの項目を挿入する

ストアドプロシージャ私はGet Column Information buttonをクリックすると、ファイル

Returns a Collection Of Scalars: Int32 

はそして、私は

Name: InsertedID 
EDM Type: Int32 
Db Type: int 
Nullable: true 

唯一の変化は、私はので、私はVS2015を再インストールしなければならなかった私のマシンでは、Windows 10にアップグレードされたことであると考えることができます作られ得ます。 - MappableType ' - > 'DeclaringMethod'

    • InsertedId.Valueは常に-1
    • エラーメッセージ「> InsertedId`' である:私が見つけ/試した何

      DeclaringMethodの誤差は

      を言う((System.RuntimeType)InsertedId.MappableType).DeclaringMethodはタイプSystem.InvalidOperationExceptionがシステムの例外をスローしました。 Reflection.MethodBase {System.InvalidOperationExceptionが}は

    • DeclaringMethod.Message

      メソッドのみType.IsGenericParameterが真であるタイプで呼び出すことができると言います。

    • は、ストアドプロシージャでOUTOUTPUTを試みた

    • しようとしましたSELECT @InsertedIDRETURN @InsertedID私が把握しようとしてきた二番目のパラメータ

    ため

  • しようとしましたnew ObjectParameter("InsertedID", typeof(Int32))の代わり-1何今は何時間も続いていますが、私は完全に立ち往生しています...

  • 答えて

    0

    私は、ストアドプロシージャから返された結果が結果セットであると不平を言っていると思いますが、なぜそれが動作するのかまだ分かりません。これに

    public int InsertItem(string itemText) 
         { 
          ObjectParameter InsertedId = new ObjectParameter("InsertedID", -1); 
          _db.usp_Fee_insert(itemText, InsertedId); 
          return (int)InsertedId.Value; 
         } 
    

    :から変更

    public int InsertItem(string itemText) 
        { 
         ObjectParameter InsertedId = new ObjectParameter("InsertedID", -1); 
         var result = _db.usp_Fee_insert(itemText, InsertedId); 
         return (int)InsertedId.Value; 
        } 
    
    関連する問題