vista varios valido una tipo tablas tabla siguientes ser seleccion requisitos relacionar registros qué puedo puede por poner poderlas podemos para objeto más mas los importante filtrado estructura encabezado eliminación definir definicion deben datos cumplir cual criterio contener consulta como columna campos campo calculados agrupar acertada c# sql-server ado.net

c# - varios - Ado.net-la propiedad Tamaño tiene un tamaño no válido de 0



qué vista es la más acertada para definir la estructura de una tabla en una base de datos (9)

Estoy tratando de obtener el valor de salida de DB a través de ADO.net. Hay un código de cliente:

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()); }

Cuando ejecuto esto obtengo la siguiente excepción:

the Size property has an invalid size of 0

De acuerdo con la propiedad SqlParameter.Size manual, podría omitir el tamaño. ¿Por qué recibo esta excepción? ¿Cómo hacer que funcione sin pasar de tamaño?
¡Gracias por tu ayuda!


Además, puede obtener el tamaño real de los parámetros inspeccionando el sproc con este pequeño comando:

SqlCommandBuilder.DeriveParameters(yourCommand)

y luego, solo tienes que encontrar tu camino a través de la colección de parámetros.


Compruebe MSDN: SqlParameter.Size Property

Para los parámetros bidireccionales y de salida, y los valores de retorno, debe establecer el valor de Tamaño. Esto no es necesario para los parámetros de entrada, y si no se establece explícitamente, el valor se deduce del tamaño real del parámetro especificado cuando se ejecuta una instrucción parametrizada.


El tamaño del parámetro es necesario para los parámetros de salida de tamaño variable. En general, ADO.NET decide el tamaño del parámetro según el valor asignado al parámetro (por lo tanto, es opcional), pero en el parámetro de salida, ya que no hay ningún valor establecido, debe proporcionar el tamaño requerido para el parámetro

Establezca el tamaño del parámetro en el tamaño de la variable de salida de la base de datos ... Diga 50

outParam.Size = 50;


Incidentalmente, establecer la propiedad de tamaño de un parámetro de salida es necesario incluso si no es un parámetro de tipo cadena. Por ejemplo, si está utilizando un System.Data.SqlDbType.Int, debe establecer el tamaño en 4.


La respuesta de todos fue tan clara como el barro para mí. Tal vez esto ayude a alguien ahora que encontré lo que funcionó.

Necesidad de agregar tamaño al parámetro

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");


No estoy seguro de si este es el mismo problema que he tenido antes, pero usar un byte para un parámetro a veces puede provocar este error.

Prueba esto. Declara explícitamente el parámetro i como una variable. LUEGO asigne su valor con la propiedad Valor.


Tienes que configurar el tamaño para la salida de parámetros

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()); }


Tuve este error, proporcionando un valor que no era un tipo de cadena, pero que puede contener nulos. En mi caso, un int? . Lo arreglé pasando un int no anulable en su lugar.


VarChar y NVarChar son campos de caracteres de ancho variable (por lo tanto, var + char). Tienes que establecer la longitud, de lo contrario el valor predeterminado es cero.