DataTable,byte 字段作为存储过程的参数
我一直在重用这种使用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函数运行此查询。
如何修改我的工作?
.NET中二进制字符串的表示forms是SqlBinary
结构 。
您想要像这样添加列:
dt.Columns.Add("BinaryMessage", typeof(SqlBinary));
SqlBinary
类具有到字节数组的显式转换和字节数组的隐式转换 ,因此从字节数组到列的值是一个简单的赋值,而从列中获取字节数组需要显式转换。
- 如何将两个System.Io.Stream实例连接成一个?
- 无法建立连接,因为目标计算机主动拒绝它127.0.0.1
- INotifyPropertyChanging接口如何帮助限制内存消耗
- 如何使NHibernate忽略POCO中的属性
- 在.NET中隐藏inheritance的通用接口成员:好,坏还是难看?
- entity framework是否具有来自Linq2Sql(ObjectContext.CreateQuery ?)的等效DataContext.GetTable
- 为什么我的区域特定Web API可以从所有其他区域访问?
- 如何在.Net中更改整个流程(不仅仅是当前线程)的CurrentCulture?
- WPF:带重置项的ComboBox