Dapper return datatable
Consulta:
En C #, uso Dapper para interactuar con SQL Server. Cuando llamo a un procedimiento almacenado que acepta 2 tablas definidas por el usuario como parámetros.
También, estoy pasando un DataTable
a mi procedimiento almacenado. Según esta página, la sintaxis para pasar un DataTable
es así:
DataTable value = new DataTable();
DynamicParameters allParameters = new DynamicParameters();
allParameters.Add("name", value, value.AsTableValuedParameter("dbo.udt_MyTable"), ParameterDirection.Input, -1);
Pero recibo este error:
Argument 3: cannot convert from 'Dapper.SqlMapper.ICustomQueryParameter' to 'System.Data.DbType?'
¿Qué hay de malo en mi sintaxis? ¿La funcionalidad anterior no funciona en Dapper?
Solución.
using (SqlConnection con1 = new SqlConnection(connectionstring))
{
using (SqlCommand cmd1 = new SqlCommand("your_procedure_name"))
{
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.Connection = con1;
SqlParameter Param = cmd1.Parameters.AddWithValue("@parameter_name", dt);
Param.SqlDbType = SqlDbType.Structured;
con1.Open();
cmd1.ExecuteNonQuery();
con1.Close();
}
}
Otra situación
Problema.
Tengo una situación en la que necesito usar Dapper para devolver un DataTable
de una consulta. ¿Cómo usar Dapper para devolver un DataTable
de una consulta?
DataTable dt = connection.Query("SELECT * FROM table");
Solución.
No habrá ninguna ventaja en usar Dapper para un escenario que involucre DataSet. Y, en particular, su ejemplo específico (sin ningún parámetro, etc.) es tan trivial (no significa negativamente, simplemente objetivamente) que también podría usar ExecuteReader directamente o usar un DbDataAdapter
Sin embargo, estoy abierto a exponer una API en dapper que exponga la API de IDataReader de dapper; puede alimentar eso a cualquier consumidor que desee, DataSet
/ DataTable
incluido. Pero realmente debo preguntar: ¿cuál sería el punto de realizar este ejemplo a través de Dapper? Podría tener más sentido si al menos estuviera usando Dapper para manejar los parámetros (estoy muy satisfecho con cómo funcionó el manejo de parámetros, la verdad sea dicha).