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 중국어 웹사이트의 기타 관련 기사를 참조하세요!