Używam ponownie tej metody używania DataTable jako parametru do procedury składowanej i działało świetnie. To jest uproszczony działający kod:DataTable z polem bajtowym [] jako parametrem procedury składowanej
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 }
);
}
Problem pojawia się, gdy pole, które chcę dodać, ma typ binarny. tj .:
dt.Columns.Add("BinaryMessage", typeof(byte[]));
odpowiedniej kolumny w bazie danych varbinary(MAX)
drodze. Kiedy próbuję to uruchomić, pojawia się następujący błąd:
Implicit conversion from data type nvarchar(max) to varbinary(max) is not allowed. Use the CONVERT function to run this query.
Jak mogę zmienić to, co mam, aby to działało?
jak wiadomo bajt [] nie jest typem danych, użyj bajtu zamiast –
Ale tablica jest typem danych ... – kei