DataTable をストアド プロシージャのパラメーターとして使用するこの方法を再利用してきましたが、うまく機能しています。これは単純化された作業コードです。
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 }
);
}
追加したいフィールドがバイナリ型の場合に問題が発生します。すなわち:
dt.Columns.Add("BinaryMessage", typeof(byte[]));
ちなみに、データベースの対応する列はvarbinary(MAX)
です。これを実行しようとすると、次のエラーが発生します。
データ型 nvarchar(max) から varbinary(max) への暗黙的な変換は許可されていません。CONVERT 関数を使用して、このクエリを実行します。
これを機能させるために必要なものを変更するにはどうすればよいですか?