Выходной SqlParameter Ошибка: свойство Size имеет недопустимый размер 0

Я знаю, что есть несколько других тем / вопросов об этой ошибке, но я хотел бы получить немного больше понимания, если это возможно. Мы видели эту ошибку периодически для определенного фрагмента кода, где у нас есть выходной параметр типа Integer.

Вот как мы определяем параметр:

SqlParameter errorParam = new SqlParameter("@ErrorCode", errorCode);
errorParam.Direction = ParameterDirection.Output;

Вы не заметите размер и DBType не указан. Кажется, ошибка не всегда возникает, но иногда это будет выдано:

свойство Size имеет недопустимый размер 0. в System.Data.SqlClient.SqlParameter.Validate(Int32 index, Boolean isCommandProc) в System.Data.SqlClient.SqlCommand.SetUpRPCParameters(_SqlRPC rpc, параметры int32 startCount, BooleleColleSolle)

Я предполагаю, что мне нужно добавить параметры DBType и Size, но что может быть основной причиной того, что это происходит, и только в некоторых случаях?

Обратите внимание, что параметр в SQL определяется как:

@ErrorCode              INT                 OUT ,

1 ответ

Решение

Размер необходим, если тип строковый, ваш тип int. Вам необходимо указать SqlDbType.Int и вы избежите этой проблемы все вместе. Вот почему вы всегда должны указывать тип.

В вашем случае, так как вы не указали тип, возможно.net считает его строкой, поэтому он ищет свойство размера. Лучше быть явным, если вы знаете, что тип предоставляет его, не полагайтесь на какой-то автоматический процесс, который может его угадать.

В вашем случае вы можете сделать это:

SqlParameter errorParam = new SqlParameter("@ErrorCode", errorCode);
errorParam.SqlDbType = SqlDbType.Int;
errorParam.Direction = ParameterDirection.Output;

Так как это int вам не нужно указывать размер.

Другие вопросы по тегам