He estado reutilizando este método de uso de una DataTable como parámetro para un procedimiento almacenado y ha funcionado muy bien. Este es el código de trabajo simplificado:DataTable con un campo byte [] como parámetro de un procedimiento almacenado
using (dbEntities dbe = new dbEntities())
{
var dt = new dataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Message");
dt.Columns.Add("CreatedOn", typeof(DateTime));
foreach (var row in randomDataSource)
{
dt.Rows.Add(
row.id,
row.message,
DateTime.Now
);
}
var tableType = new SqlParameter("tableType", SqlDbType.Structured);
tableType.Value = dt;
tableType.TypeName = "[dbo].[RandomTableType]";
dbe.ExecuteStoreCommand(
"EXEC [dbo].[SaveTable] @tableType",
new object[] { tableType }
);
}
El problema surge cuando el campo que deseo agregar es de tipo binario. es decir .:
dt.Columns.Add("BinaryMessage", typeof(byte[]));
la columna correspondiente en la base de datos es varbinary(MAX)
por cierto. Cuando trato de ejecutar esto, me sale este error:
Implicit conversion from data type nvarchar(max) to varbinary(max) is not allowed. Use the CONVERT function to run this query.
¿Cómo puedo modificar lo que tengo que hacer este trabajo?
como usted puede saber byte [] no es un tipo de datos, use byte en lugar de –
Pero una matriz es un tipo de datos ... – kei