2017-04-20 70 views
0

SQL Server 2016で、Entity Frameworkコアv1.1.1を使用してASP.Netコアプロジェクトのメソッドから呼び出したいストアドプロシージャがあります。ここでDatabase.ExecuteSqlCommandによって呼び出されるストアドプロシージャから文字列結果を取得する方法

は、私はSSMS 2016から私のストアドプロシージャを実行すると、私は目的の文字列の結果を得る

ALTER PROCEDURE [dbo].[GetNextSerialNumber] 
    @mailerId    NVARCHAR(9), 
    @serviceTypeCode  NVARCHAR(4), 
    @serialNumber   NVARCHAR(14) OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 
    DECLARE @counter  BIGINT 
    DECLARE @start_counter BIGINT 
    DECLARE @end_counter BIGINT 
    DECLARE @length   INT 
    DECLARE @tempCounters TABLE 
    (
     current_counter  BIGINT, 
     start_counter  BIGINT, 
     end_counter   BIGINT, 
     [length]   INT 
    ) 

    INSERT INTO 
     @TempCounters 
    SELECT 
     current_counter, 
     start_counter, 
     end_counter, 
     [length] 
    FROM 
     MailerIdCounters 
    WHERE 
     mailer_id = @mailerId 
     AND service_type_code = @serviceTypeCode 
     AND active = 1 


    IF EXISTS (SELECT * FROM @tempCounters) 
    BEGIN 
     SELECT @counter = current_counter FROM @tempCounters 
     SELECT @start_counter = start_counter FROM @tempCounters 
     SELECT @end_counter = end_counter FROM @tempCounters 
     SELECT @length = [length] FROM @tempCounters 
    END 

    IF (@counter + 1) > @end_counter 
     SET @counter = @start_counter 
    ELSE 
     SET @counter = @Counter + 1 

    UPDATE MailerIDCounters 
    SET current_counter = @counter 
    WHERE mailer_id = @mailerId 
    AND service_type_code = @serviceTypeCode 

    SELECT RIGHT('00000000000000'+CAST(@counter AS VARCHAR(14)), @length) 
    SET @serialNumber = @counter 
END 

...

private string GetNextSerialNumber(string a_mailerId, string a_serviceTypeCode) 
    { 
     try 
     { 
      var mailerId = new SqlParameter 
      { 
       ParameterName = "@mailerId", 
       SqlDbType = SqlDbType.NVarChar, 
       Direction = ParameterDirection.Input, 
       Size = 9, 
       Value = a_mailerId 
      }; 

      var serviceTypeCode = new SqlParameter 
      { 
       ParameterName = "@serviceTypeCode", 
       SqlDbType = SqlDbType.NVarChar, 
       Direction = ParameterDirection.Input, 
       Size = 4, 
       Value = a_serviceTypeCode 
      }; 

      var serialNumber = new SqlParameter 
      { 
       ParameterName = "@serialNumber", 
       SqlDbType = SqlDbType.NVarChar, 
       Size = 14, 
       Direction = ParameterDirection.Output 
      }; 

      var result = m_mailpieceRoContext.Database.ExecuteSqlCommand(
       "exec GetNextSerialNumber @mailerId, @serviceTypeCode, @serialNumber OUT", mailerId, serviceTypeCode, serialNumber); 


      return result; 

     } 
     catch (Exception ex) 
     { 

      throw; 
     } 

    } 

、ここでは私のストアドプロシージャです...私の方法であり、 (つまり、0000)、上記のGetNextSerialNumberメソッドのresultの値は-1です。

アイデア?

お手数ですがお寄せいただきありがとうございます。

答えて

2
context.Database.ExecuteSqlCommand(
    "exec GetNextSerialNumber @serialNumber OUT", serialNumber); 

ExecuteSqlCommand実行結果のみ(-1)です。シリアル番号を取得するには、コマンド実行後に出力パラメータの値を確認してください:

var val = serialNumber.Value; 
+0

それでした。魅力のように動作します。ありがとう:) – EiEiGuy

関連する問題