c# - 将 C# 转换的 base64 存储为 SQL Server varbinary(max)

标签 c# sql-server

我有一个角度 Web 应用程序,我在其中接受 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)')

我取回 Unicode 符号而不是 base64,否则我会粘贴示例。

我需要在不调用 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 符号,web 应用程序中没有图像显示。我不想要中间转换,因为无论用户上传图片还是有人手动插入图片,我都想要一致的结果。

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

最佳答案

这对我有用:

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

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

关于c# - 将 C# 转换的 base64 存储为 SQL Server varbinary(max),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27678013/

相关文章:

sql - 如果 count(values) > 1,则将所有值合并到一个单元格中

c# - 如何使用 WPF 绑定(bind)触发 DataGrid 中特定单元格的更新

c# - Selenium ChromeDriver - 是否可以加载多个扩展?

sql - 执行查询命令(动态sql)比普通查询运行速度更快

c# - 从数据库填充菜单

SQL : counting and grouping by on the same column with conditions

c# - Lambda 作为参数

c# - 专辑插图未编码

c# - 如何在 2 个 ItemsSource 列表中公开 DependencyProperties(不传播)

sql - 对 2 个相互依赖的表进行复杂的 SQL 更新