-
[ADO.NET] 프로시저 호출 시 the Size property has an invalid size of 0 오류 일어날 때 확인 사항.NET/개념 및 유용한 팁 2023. 4. 20. 22:42반응형
1. 오류원인
SqlCommand 사용시 SqlParameter 가 Varchar와 같이 사이즈가 지정된 유형을 OUTPUT으로 받는 파라메터라면 Size를 필수적으로 설정해야한다. 그러지 않을 경우 the Size property has an invalid size of 0 오류가 발생할 수 있다.
2. 재현
아래와 같은 테이블과 프로시저 있다고 가정하자.
-- 테이블 CREATE TABLE ApplicationDB.dbo.Student ( StudentId INT NOT NULL PRIMARY KEY, -- primary key column "Name" [NVARCHAR](50) NOT NULL, "Id" [NVARCHAR](50) NOT NULL -- specify more columns here ) GO -- 프로시저 CREATE PROCEDURE InsertStudent @StudentId INT, @Name NVARCHAR(50), @Id NVARCHAR(50), @Result VARCHAR(10) OUTPUT AS BEGIN SET NOCOUNT ON; INSERT INTO ApplicationDB.dbo.Student (StudentId, "Name", "Id") VALUES (@StudentId, @Name, @Id); SET @Result = 'Success'; END GO
아래 소스코드는 the Size property has an invalid size of 0 오류가 발생한다.
using System.Data.SqlClient; SqlConnection conn = new SqlConnection("Server=localhost;Database=ApplicationDB;User Id=sa;Password=P@ssw0rd;"); conn.Open(); SqlCommand cmd = new SqlCommand("InsertStudent", conn); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@Name", "John")); cmd.Parameters.Add(new SqlParameter("@Result", System.Data.SqlDbType.VarChar)); cmd.Parameters["@Result"].Direction = System.Data.ParameterDirection.Output; cmd.ExecuteNonQuery(); // print result Console.WriteLine(cmd.Parameters["@Result"].Value); conn.Close();
cmd.Parameters.Add(new SqlParameter("@Result", System.Data.SqlDbType.VarChar)); 부분을 아래와 같이 바꾸면 된다.
cmd.Parameters.Add(new SqlParameter("@Result", System.Data.SqlDbType.VarChar, 10));
3. 참조
반응형'.NET > 개념 및 유용한 팁' 카테고리의 다른 글
[.NET] The last access/last write time on file 빌드오류 (0) 2023.03.12 [.NET] 비동기(async, await) 방식의 메소드를 동기 방식으로 안전하게 호출하기 (1) 2023.01.04 [.NET] Benchmark - Count() vs Any() (0) 2023.01.03 [.NET] ASP.NET Core 및 비동기(async, await) 프로그래밍 개발에 도움이 되는 설명 사이트 (0) 2022.12.26 [EFCore] EF Core Tool 로 C# 모델 클래스 -> DB 마이그레이션 하기 (0) 2022.08.07