如何将字节数组存储在Varbinary类型的SQL Server表列中?

sta*_*ord 4 c# sql-server

我有一个要求,我想使用C#代码将字节数组存储在Varbinary类型的sql服务器表列中。现在,当我尝试执行此操作时,我在sql server表中 "0x4A6974656E6472612053616E6B686C61"获得了一个字节数组值a[] = { 74, 105, 116, 101, 110, 100, 114, 97, 32, 83, 97, 110, 107, 104, 108, 97}。我不确定如何做到这一点。我得到的值实际上是每个十进制数字的十六进制表示形式。

就像sql server在将字节数组存储到varbinary sql table列时执行一些内部转换一样吗?

use*_*080 5

您会看到该字段中存储的实际二进制值的十六进制字符串表示形式,因为这是一种表示字节的半可读版本。怎么回事它应该显示?

该字符串表示与实际字节是不一样的。大多数类型都是如此。如果您存储一个整数,例如7622389,则它实际上也存储为一定数量的字节(取决于字段的大小)。但是,显示实际字节而不是值的字符串表示形式只会令人困惑。

对于一般用途的二进制数据时,十六进制字符串格式是逻辑字符串表示。如果字节恰巧构成了图像文件或某些其他众所周知的文件格式,则从理论上讲,SQL Server Management Studio 可以显示图片的缩略图。但是由于该字段仅包含通用二进制数据,因此它无法真正知道哪种显示格式是最好的,因此它使用十六进制字符串。

当您实际从数据库中选择C#程序的字段时,通常会得到byte[],有时是包裹在某种类型的容器中。