Ado.net-Size 속성의 크기가 0으로 잘못되었습니다.
ADO.net을 통해 DB에서 출력 값을 얻으려고합니다. 클라이언트 코드가 있습니다.
using (var connection = new SqlConnection(ConnectionString))
{
connection.Open();
SqlCommand command = new SqlCommand("pDoSomethingParamsRes", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@i", 1);
var outParam = new SqlParameter("@out", SqlDbType.VarChar);
outParam.Direction = ParameterDirection.Output;
command.Parameters.Add(outParam);
command.ExecuteNonQuery();
Console.WriteLine(command.Parameters["@out"].Value.ToString());
}
이것을 실행할 때 다음 예외가 발생합니다.
the Size property has an invalid size of 0
수동 SqlParameter.Size 속성에 따라 크기를 생략 할 수 있습니다. 이 예외가 발생하는 이유는 무엇입니까? 크기를 전달하지 않고 작동하도록 만드는 방법은 무엇입니까?
도와 주셔서 감사합니다!
VarChar 및 NVarChar는 가변 너비 문자 필드입니다 (따라서 var + char). 길이를 설정해야합니다. 그렇지 않으면 기본값은 0입니다.
변수 크기 출력 매개 변수에는 매개 변수 크기가 필요합니다. 일반적으로 ADO.NET은 매개 변수에 할당 된 값을 기준으로 매개 변수의 크기를 결정하지만 (따라서 선택 사항 임) 출력 매개 변수에는 값이 설정되지 않았으므로 매개 변수에 필요한 크기를 제공해야합니다.
매개 변수 크기를 DB의 출력 변수 크기로 설정합니다.
outParam.Size = 50;
덧붙여서 출력 매개 변수의 크기 속성은 문자열 유형 매개 변수가 아니더라도 설정해야합니다. 예를 들어 System.Data.SqlDbType.Int를 사용하는 경우 크기를 4로 설정해야합니다.
MSDN 확인 : SqlParameter.Size 속성
양방향 및 출력 매개 변수와 반환 값의 경우 크기 값을 설정해야합니다. 이는 입력 매개 변수에 필요하지 않으며 명시 적으로 설정되지 않은 경우 매개 변수화 된 명령문이 실행될 때 지정된 매개 변수의 실제 크기에서 값이 유추됩니다.
모든 사람들의 대답은 나에게 진흙처럼 분명했습니다. 아마도 이것이 내가 효과가있는 것을 찾았으므로 누군가에게 도움이 될 것입니다.
매개 변수에 크기를 추가해야합니다.
DynamicParameters Params = new DynamicParameters();
Params.Add("@ProfileID", ProfileID);
Params.Add("@CategoryName", CategoryName);
Params.Add("@Added", dbType: DbType.String, direction: ParameterDirection.Output,size:10);
db.Execute(sql, Params, commandType: CommandType.StoredProcedure, commandTimeout: 60);
var Added = Params.Get<string>("@Added");
이것이 이전에 겪었던 것과 동일한 문제인지 확실하지 않지만 매개 변수에 바이트를 사용하면 때때로이 오류가 발생할 수 있습니다.
이 시도. i 매개 변수를 변수로 명시 적으로 선언하십시오. 그런 다음 Value 속성을 사용하여 값을 할당합니다.
또한 다음 작은 명령으로 sproc을 검사하여 매개 변수의 실제 크기를 얻을 수 있습니다.
SqlCommandBuilder.DeriveParameters(yourCommand)
그런 다음 매개 변수 컬렉션을 통해 방법을 찾아보십시오.
이 오류가 발생하여 문자열이 아니지만 nullable 형식의 값을 제공했습니다. 제 경우에는 int?
. int
대신 nullable이 아닌 값을 전달하여 수정했습니다 .
매개 변수 출력을 위해 크기를 설정해야합니다.
using (var connection = new SqlConnection(ConnectionString))
{
connection.Open();
SqlCommand command = new SqlCommand("pDoSomethingParamsRes", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@i", 1);
var outParam = new SqlParameter("@out", SqlDbType.VarChar);
outParam.Direction = ParameterDirection.Output;
outParam.Size = 50; // this is example
command.Parameters.Add(outParam);
command.ExecuteNonQuery();
Console.WriteLine(command.Parameters["@out"].Value.ToString());
}
참조 URL : https://stackoverflow.com/questions/3759285/ado-net-the-size-property-has-an-invalid-size-of-0
'IT박스' 카테고리의 다른 글
dict 문자열 출력을 멋지게 포맷하는 방법 (0) | 2021.01.06 |
---|---|
C # 구조체가 변경 불가능한 이유는 무엇입니까? (0) | 2021.01.06 |
'내 애플리케이션 평가'에 대한 Android 접근 방식 (0) | 2021.01.06 |
각 하위 요소에 대한 지연이있는 CSS 애니메이션 (0) | 2021.01.06 |
난수 목록을 생성하는 방법은 무엇입니까? (0) | 2021.01.06 |