tabla stored salida procedimiento pasar parametros parametro ejemplo ejecutar con como almacenado c#-4.0 stored-procedures sql-server-2008-r2 petapoco table-valued-parameters

c#-4.0 - stored - ejecutar procedimiento almacenado sql server ejemplo



Pasar el parĂ¡metro de valor de la tabla al procedimiento almacenado usando PetaPoco (1)

Mientras trato de llamar al procedimiento almacenado de SQL Server 2008 R2 usando PetaPoco.

Mi procedimiento almacenado acepta un parámetro valuado de tabla.

¿Cómo puedo llamar al procedimiento almacenado en petapoco con el parámetro de tabla param?

Aquí lo que estoy tratando de hacer:

var db = new PetaPoco.Database("repikaciskaBaza"); DataTable table = new DataTable(); DataColumn id = table.Columns.Add("id", type: typeof(Int32)); for (int i = 0; i < 10;i++ ) { DataRow row = table.NewRow(); row["id"] = i; table.Rows.Add(row); } var param = new SqlParameter(); param.DbType = DbType.Object; param.ParameterName = "@art_id"; param.SqlValue = table; var lista = db.Query<pocoArts>(";exec dbo.test_sporc_param @0", param);

Este código me da una excepción:

La secuencia de protocolo de llamada a procedimiento remoto (RPC) de flujo de datos tabulares entrante es incorrecta.
Parámetro 3 ("@ 0"): el tipo de datos 0x62 (sql_variant) tiene un tipo no válido para los metadatos específicos del tipo.

Si configuro el valor del parámetro

param.SqlDbType = SqlDbType.Structured;

Entonces me sale una excepción como

The table type parameter ''@0'' must have a valid type name.

Cuando defino mi param como

param.SqlDbType = SqlDbType.Structured; param.SqlValue = table; param.ParameterName = "@art_id"; param.TypeName = SqlDbType.Structured.ToString();

Entonces recibo una excepción

Columna, parámetro o variable @ 0. : No se puede encontrar el tipo de datos Estructurado.

¿Cómo puedo definir SqlParam con param con valores de tabla para que pueda enviarlo con datos a SQL Server?

Solución :

var param = new SqlParameter(); param.SqlDbType = SqlDbType.Structured; // According to marc_s param.SqlValue = table; param.ParameterName = "@art_id"; param.TypeName = "dbo.typ_art_id"; // this is TYP from SQL Server database it needs to be equal to type defined in SQL Server not type of param