6

asp.netのLINQからSQLサーバーでプロを実行しようとしています。SQL で Proc を実行すると正常に動作しますが、asp.net で linq から呼び出そうとすると、「System.Void' はマップされたストアド プロシージャ メソッドの有効な戻り値の型ではありません」というエラーがスローされます。プロセス、

   ALTER PROCEDURE [dbo].[VIEW_COLUMN] 

   @REPORT_NO INT ,
   @TEMPLATE_NAME VARCHAR(100),
   @BODY_TEXT VARCHAR(500),
   @BODY_TEXT_O VARCHAR(500) OUTPUT

   AS
   BEGIN
  --DECLARE VARIABLES--
  DECLARE @BODY_TEXT VARCHAR(100)

   ----------- etc----
   ------etc etc-----
   SET @BODY_TEXT_O = @BODY_TEXT
   END

私のASP.netページでは、

    using (EHSIMSDataContext db = new EHSIMSDataContext(EHSIMSConnectionString.GetConnectionString()))
    {

        string MainString = _EmailTemp.TEMPLATE_TEXT;
        int? R = 000001;
        string b = "";
        string temname = _EmailTemp.VIEW_NAME;
        db.VIEW_COLUMN(R, temname, MainString, ref b);
    }

エラーの後、私はグーグルでデザイナーページを次のように変更しました(voidを削除し、文字列を追加し、最後の戻り行を追加しました)

          public string VIEW_COLUMN ------etc
           {
             IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), rEPORT_NO, tEMPLATE_NAME, bODY_TEXT, bODY_TEXT_O);
        bODY_TEXT_O = ((string)(result.GetParameterValue(3)));
                    return ((string)(result.ReturnValue));
         }

そして、上記のコードと「Public Void VIEW_COLUMN」のメソッドには戻り値がありません。これはまだいくつかの異なるエラーを示しており、プロシージャ プロパティの DBML ファイルで文字列を戻り値の型として設定しようとしましたが、まだ使用されていません。何が欠けているのかわからない。

追加情報 手順に一時テーブルとテーブル変数がありますが、それが原因でしょうか?

いくつかの返信は本当に役に立ちます...ありがとう

4

3 に答える 3

2

あなたは近くにいます。ストアド プロシージャ (dbml 内) の戻り値の型を int に変更する必要があります。

実際、Linq は次の sql コマンドを実行し、実行結果を int として返します。

DECLARE @ReturnValue int

EXEC    @ReturnValue = [dbo].[VIEW_COLUMN]

SELECT  'ReturnValue' = @ReturnValue
于 2015-12-12T23:06:15.750 に答える
1

出力パラメーターを介してではなく直接テキストを返すように、ストアド プロシージャを変更してみてください。

最後にもう 1 行追加します。

SELECT @BODY_TEXT_O;
于 2013-07-17T10:43:39.273 に答える