2013-07-29 7 views
0

삽입 후 출력 매개 변수가 ID 열의 빈 값을 반환하는 이유는 무엇입니까?sqlserver 출력 매개 변수가 비어 있음

ALTER PROCEDURE [dbo].[TestSerPsp] 

@ValColp      nvarchar(5), 
@RetKeyp      int OUTPUT 

AS 
BEGIN 

SET NOCOUNT ON 

*** Test 1- This uses the scope identity function 
Insert into TestSP (ValCol) Values (@ValColp); SELECT @RetKeyp = SCOPE_IDENTITY() 

*** Test 2- This uses the @@ identity function 
Insert into TestSP (ValCol) Values (@ValColp) 
SET @RetKeyp = @@Identity 

그리고 :

using System.Data.SqlClient; 

SqlConnection conn = new SqlConnection  
SqlCommand cmd = new SqlCommand(); 
cmd.Connection = conn; 
cmd.CommandType = CommandType.Text; 

cmd.CommandText = "TestSerPsp @ValColp, @RetKeyp"; 

cmd.Parameters.Add("@RetKeyp", SqlDbType.Int); 
cmd.Parameters["@RetKeyp"].Direction = ParameterDirection.Output; 

cmd.Parameters.Add("@ValColp", SqlDbType.NChar); 
cmd.Parameters["@ValColp"].Value = "QQ"; 

conn.Open(); 
cmd.ExecuteNonQuery(); 
conn.Close(); 
string x = cmd.Parameters["@RetKeyp"].Value.ToString(); 

이 저장 SQL 서버가 절차 :

나는 다양한 테스트 및 반환 출력 매개 변수를 시도 여기

는 C# 코드 항상 비어 여기에 테이블 DDL이 있습니다 :

CREATE TABLE [dbo].[TestSP](
    [KeyCol] [int]  IDENTITY(1,1) NOT NULL, 
    [ValCol] [nchar](10)     NULL, 
CONSTRAINT [PK_TestSP] PRIMARY KEY CLUSTERED 
(
[KeyCol] ASC 
) WITH (PAD_INDEX = OFF, 
     STATISTICS_NORECOMPUTE = OFF, 
     IGNORE_DUP_KEY = OFF, 
     ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

END 

답변

0

대신 CommandType.StoredProcedure의 CommandType을 사용해 보셨습니까?

명령 텍스트의 경우 프로 시저 이름을 사용하고 매개 변수를 지정한 다음 실행하십시오.

OUTPUT 매개 변수가 CommandType.Text에 지원되는지 확실하지 않습니다.

0

대부분의 사람들은 SqlConnection 개체를 다룰 때 "using"문을 사용합니다. 여기

예 :

http://www.dotnetperls.com/sqlconnection

내가 연결을 닫기 전에 값을 얻을 것입니다.

string x = cmd.Parameters["@RetKeyp"].Value.ToString(); 
conn.Close(); 

하지만 다시 "사용"구문을 살펴보십시오.

관련 문제