IT박스

Ado.net-Size 속성의 크기가 0으로 잘못되었습니다.

itboxs 2021. 1. 6. 07:54
반응형

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

반응형