加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

存储C#转换base64为SQL Server varbinary(max)

发布时间:2020-12-15 22:10:24 所属栏目:百科 来源:网络整理
导读:我有一个有角度的webapp,我接受base64中的图像并将它们存储在T-SQL varbinary中.但是,我在SQL-Server中存储的现有数据看起来是不同的二进制文件.我需要两个二进制文件在C#中使用相同的读/更新方法. 在服务中我试图将base64字符串转换为SQL Server的varbinary
我有一个有角度的webapp,我接受base64中的图像并将它们存储在T-SQL varbinary中.但是,我在SQL-Server中存储的现有数据看起来是不同的二进制文件.我需要两个二进制文件在C#中使用相同的读/更新方法.

在服务中我试图将base64字符串转换为SQL Server的varbinary,反之亦然.

在SSMS中手动,我可以只使用base64字符串并插入如下行:

Cast(@base64ImgStr as varbinary(max))

但是当我尝试从C#插入时结果是不同的:

Convert.FromBase64String(base64);

(相同的输入).由于二进制文件不同,因此图像不显示.我需要一个C#中的方法,它提供与T-SQL中相同的二进制文件.

我必须围绕解决方案,因为我可以在SQL Server中投射并获得正确的base64(再次,不是在C#中),如下所示:

cast('' as xml).value('xs:base64Binary(sql:variable("@source"))','varchar(max)')

而不是base64我得到了Unicode符号,否则我会粘贴一个例子.

我需要在不调用SQL Server base64Binary方法的情况下获取base64,因为我的服务读取如下图像:

Encoding.ASCII.GetString(varbinary)

如果我将手动插入的varbinary(Cast(@ base64ImgStr as varbinary(max)))转换为varchar(max),我会得到一个base64字符串,并且图像会在我的webapp中正确显示.
但是,当我使用C#方法创建二进制文件时,情况并非如此.对于我从Convert.FromBase64String(base64)获得的varbinary类型,我需要在SQL Server(xs:base64binary)中进行中间转换,以将二进制文件反转为base64.没有中间转换,我得到Unicode符号,webapp中没有图像显示.我不想进行中间转换,因为无论用户上传图片还是有人手动插入图片,我都希望获得一致的结果.

我没有在Convert类上看到一个方法,它给了我相同类型的二进制文件.但这似乎正是我所需要的.我怀疑是Unicode.请帮忙!

解决方法

这对我有用:

var image = Convert.FromBase64String(base64);
string hex = BitConverter.ToString(image);
hex = hex.Replace("-","");
hex = "0x" + hex;

此十六进制可以保存在varbinary(MAX)字段中,无需转换或转换,并将在浏览器中显示为图像.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读