Csharp/C#教程:DataTable,byte 字段作为存储过程的参数分享


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

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐