2017-01-19 22 views
1

このようなストアドプロシージャを使用して、データベースから1つのデータを取得しようとしています。C#コードがストアドプロシージャから値を返さないのはなぜですか?

USE [PSD] 
GO 
/****** Object: StoredProcedure [dbo].[ocso_GetNextDTEventNumber] Script Date: 1/19/2017 10:12:19 AM ******/ 
SET ANSI_NULLS ON 
GO 
    SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[ocso_GetNextDTEventNumber] 
    @EventNumber varchar(15) OUTPUT 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

--increment last number by 1 
UPDATE LU_EVENT_NUMBERS SET evn_last_number = evn_last_number + 1 where evn_year = Year(GetDate()) 
--return event number to caller 

    --Get the next event number for all incidents 
SELECT @EventNumber = evn_comp_formatted_next_num from LU_EVENT_NUMBERS where evn_year = Year(GetDate()) 

END 

私は、このSQLコード

DECLARE @NewEventNumber varchar(15) 
Execute dbo.ocso_GetNextDTEventNumber 
@EventNumber = @NewEventNumber OUTPUT; 
Print convert(varchar(15),@NewEventNumber) 

を使用してこの手順をテストし、私は私が期待する結果が得られます。さて、私はこのようなC#コードで結果を得ようとします。

私は空の文字列を返します。なぜこれは機能しないのですか?

+7

あなたのパラメータはEventNumber' @ではなく 'NewEventNumber' – Crowcoder

+2

' _cmd.CommandType = CommandType.StoredProcedure' @ 'のですか? –

+0

ありがとう#Crowcoderを@EventNumberに変更したときにエラーが発生する{"プロシージャまたは関数 'ocso_GetNextDTEventNumber'はパラメータ '@EventNumber'が指定されていませんでした。}} – Perry

答えて

4

あなたはストアド・プロシージャを実行したいコマンドを伝えるのを忘れている:

using (SqlCommand _cmd = new SqlCommand("ocso_GetNextDTEventNumber", _con)) 
{ 
    _cmd.CommandType = CommandType.StoredProcedure; 
    //... 
} 

デフォルトでTextである(その普通のSQLクエリを)取られ、それを指定しない場合。これは例外が発生するので、あなたはどこか空のTry....Catchがあると思います。

また、同じパラメータ名を使用する必要があります。

_cmd.Parameters.Add("@EventNumber", SqlDbType.VarChar, 15).Direction = ParameterDirection.Output; 
_cmd.ExecuteNonQuery(); 
results = _cmd.Parameters["@EventNumber"].Value.ToString(); 
+0

問題ありがとうございました – Perry

関連する問題