> 백엔드 개발 > C++ > C#의 SQL Server 저장 프로시저에서 출력 매개 변수를 성공적으로 검색하려면 어떻게 해야 합니까?

C#의 SQL Server 저장 프로시저에서 출력 매개 변수를 성공적으로 검색하려면 어떻게 해야 합니까?

DDD
풀어 주다: 2025-01-10 09:09:40
원래의
323명이 탐색했습니다.

How Can I Successfully Retrieve Output Parameters from a SQL Server Stored Procedure in C#?

C#에서 저장 프로시저 출력 매개변수 사용

질문

SQL Server 저장 프로시저의 출력 매개변수를 C# 변수로 반환하는 것은 어려울 수 있습니다. 다양한 권장 사항을 따랐음에도 불구하고 많은 개발자는 여전히 null 값이나 기타 문제를 보고합니다.

저장 프로시저

계약 번호를 데이터베이스에 삽입하고 기본 키를 출력 매개변수로 반환하도록 설계된 다음 저장 프로시저 usp_InsertContract를 고려해 보세요.

<code class="language-sql">CREATE PROCEDURE usp_InsertContract
    @ContractNumber varchar(7),
    @NewId int OUTPUT
AS
BEGIN
    INSERT INTO [dbo].[Contracts] (ContractNumber)
        VALUES (@ContractNumber);
    Select @NewId = Id From [dbo].[Contracts] where ContractNumber = @ContractNumber;
END</code>
로그인 후 복사

데이터베이스 열기

다음 코드를 사용하여 데이터베이스 연결을 엽니다.

<code class="language-csharp">pvConnectionString = "Server = Desktop-PC\SQLEXPRESS; Database = PVDatabase; User ID = sa;
    PASSWORD = *******; Trusted_Connection = True;";

try
{
    pvConnection = new SqlConnection(pvConnectionString);
    pvConnection.Open();
}
catch (Exception e)
{
    databaseError = true;
}</code>
로그인 후 복사

명령 실행

다음 코드를 사용하여 저장 프로시저를 실행합니다.

<code class="language-csharp">pvCommand = new SqlCommand("usp_InsertContract", pvConnection);

pvCommand.Transaction = pvTransaction;
pvCommand.CommandType = CommandType.StoredProcedure;

pvCommand.Parameters.Clear();
pvCommand.Parameters.Add(new SqlParameter("@ContractNumber", contractNumber));

SqlParameter pvNewId = new SqlParameter();
pvNewId.ParameterName = "@NewId";
pvNewId.DbType = DbType.Int32;
pvNewId.Direction = ParameterDirection.Output;
pvCommand.Parameters.Add(pvNewId);

try
{
    sqlRows = pvCommand.ExecuteNonQuery();

    if (sqlRows > 0)
        Debug.Print("New Id Inserted =  ", 
            pvCommand.Parameters["@NewId"].Value.ToString()); 
}
catch (Exception e)
{
    Debug.Print("Insert Exception Type: {0}", e.GetType());
    Debug.Print("  Message: {0}", e.Message);
}</code>
로그인 후 복사

솔루션

SCOPE_IDENTITY()을 사용하여 기본 키를 검색하고 저장 프로시저를 몇 가지 수정하여 null 값 문제를 해결합니다.

<code class="language-sql">CREATE PROCEDURE usp_InsertContract
    @ContractNumber varchar(7),
    @NewId int OUTPUT
AS
BEGIN
    INSERT INTO [dbo].[Contracts] (ContractNumber)
    VALUES (@ContractNumber);
    SELECT @NewId = SCOPE_IDENTITY();
END</code>
로그인 후 복사

이 수정된 저장 프로시저를 C#에서 사용하려면 다음 코드를 구현하세요.

<code class="language-csharp">using(SqlConnection conn = new SqlConnection(pvConnectionString))
using(SqlCommand cmd = new SqlCommand("dbo.usp_InsertContract", conn))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@ContractNumber", SqlDbType.VarChar, 7).Value = contractNumber;
    cmd.Parameters.Add("@NewId", SqlDbType.Int).Direction = ParameterDirection.Output;
    conn.Open();
    cmd.ExecuteNonQuery();
    int contractID = Convert.ToInt32(cmd.Parameters["@NewId"].Value);
    conn.Close();
}</code>
로그인 후 복사

이 코드는 저장 프로시저에서 반환된 기본 키를 성공적으로 검색하고 인쇄합니다.

위 내용은 C#의 SQL Server 저장 프로시저에서 출력 매개 변수를 성공적으로 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿