ADO.NET - Size 속성의 크기가 0입니다.
ADO를 통해 DB에서 출력값을 구하려고 합니다.NET. 클라이언트 코드가 있습니다.
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 Property I이(가) size를 생략할 수 있습니다.왜 이 예외가 적용됩니까?
사이즈를 통과하지 않고 작동시키는 방법은?
VarChar 및 NVarChar는 가변 너비 문자 필드입니다(따라서 var+char).길이를 설정해야 합니다. 그렇지 않으면 기본값은 0입니다.
변수 크기 출력 매개 변수에는 매개 변수 크기가 필요합니다.일반적으로 ADO.NET은 파라미터에 할당된 값(Value)을 기준으로 파라미터의 크기를 결정하지만(따라서 선택사항임), 출력 파라미터에서는 값이 설정되지 않기 때문에 파라미터에 필요한 크기를 제공해야 합니다.
파라미터 크기를 DB에서 출력 변수의 크기로 설정...말50
outParam.Size = 50;
그런데 출력 파라미터의 크기 속성은 문자열 형태의 파라미터가 아니더라도 설정해야 합니다.예를 들어, 시스템을 사용하는 경우.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)
매개변수 수집을 통해 각자의 길을 찾아갑니다.
문자열은 아니지만 null로 입력할 수 있는 값을 제공하는 오류가 발생했습니다.저 같은 경우에는.int?. 무효가 아닌 것을 통과시켜서 고쳤습니다.int대신.
파라미터 출력에 대해 Size를 설정해야 합니다.
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());
}
같은 오류가 있었고 아래는 작동하는 제 코드입니다.
cmd.Parameters("@ProjectKey").SqlDbType = SqlDbType.NVarChar
cmd.Parameters("@ProjectKey").Size = 150
cmd.Parameters("@ProjectKey").Direction = ParameterDirection.InputOutput
cmd.ExecuteNonQuery()
언급URL : https://stackoverflow.com/questions/3759285/ado-net-the-size-property-has-an-invalid-size-of-0
'programing' 카테고리의 다른 글
| 다른 모듈에서 사용할 파이프를 글로벌하게 선언하는 방법은 무엇입니까? (0) | 2023.09.26 |
|---|---|
| GDB: 일반 포인터의 참조 해제 시도 (0) | 2023.09.26 |
| node.js 스택 오류에 10개 이상의 행이 있습니까? (0) | 2023.09.21 |
| PHP AJAX 12017 헤더 호출 시 오류(위치:) (0) | 2023.09.21 |
| 하나의 쿼리(MySQL)에서 여러 조건에 대한 다중 COUNT() (0) | 2023.09.21 |