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
类具有到字节数组的显式转换和字节数组的隐式转换 ,因此从字节数组到列的值是一个简单的赋值,而从列中获取字节数组需要显式转换。
上述就是C#学习教程:DataTable,byte 字段作为存储过程的参数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1012706.html