我需要从SQL Server列中取一个Varbinary(max)
并将其插入另一个varbinary
列,但是当通过新字段显示时我的图像不呈现,我做错了什么?< / p>
我已从SQL Server复制,即
E7D28201A240202178EF491E413EB4DDBCFB54A15077A989A37A0C5E4E0F143AEE7000CE3F3A70C0E4F342E524C8F4A7243888AA581EC051B030E7A8EF4E233DF.....
然后
update client
set Photo = convert(varbinary(max),'E7D28201A240202178EF491E413EB4DDBCFB54A15077A989A37A0C5E4E0F143AEE7000CE3F3A70C0E4F342E524C8F4A7243888AA581EC051B030E7A8EF4E233DF.....')
where id='40946b09-81be-42b0-ae62-63182acb1e89'
答案 0 :(得分:7)
数据不是Base64 encoded,因为它会有更大范围的字母字符,而这个值是纯十六进制值(即0-9,A-F)。此外,O.P。(在对问题的评论中)提供的示例HTML代码是:
<img src="data:image;base64,@System.Convert.ToBase64String(Model.PhotoDisplay)
显示Model.PhotoDisplay
的源值首先将转换为 Base64,以便data:image;base64
类型指定正确。
问题是SQL Server在被要求转换值时,不知道它已经是十六进制/二进制字符串。您需要告诉SQL Server源数据的格式是什么。这可以通过两种方式完成:
根据您构建此值的方式,您只需添加0x
前缀并删除单引号:
UPDATE cl
SET cl.Photo = CONVERT(VARBINARY(MAX), 0xE7D28201A24020.....)
FROM Client cl
WHERE cl.[id] = '40946b09-81be-42b0-ae62-63182acb1e89';
如果您需要将值保留为字符串,和正在使用SQL Server 2008或更高版本,那么您可以使用&#34;样式&#34; CONVERT函数的选项告诉SQL Server它是二进制值,并且您还有
的附加选项添加0x
前缀并使用&#34;样式&#34; 1
:
UPDATE cl
SET cl.Photo = CONVERT(VARBINARY(MAX), '0xE7D28201A24020.....', 1)
FROM Client cl
WHERE cl.[id] = '40946b09-81be-42b0-ae62-63182acb1e89';
保留不带0x
前缀的值并使用&#34;样式&#34; 2
:
UPDATE cl
SET cl.Photo = CONVERT(VARBINARY(MAX), 'E7D28201A24020.....', 2)
FROM Client cl
WHERE cl.[id] = '40946b09-81be-42b0-ae62-63182acb1e89';
但是,如果这些数据真的来自另一个表中的VARBINARY(MAX)
字段,那么它最初是如何以字符串形式结束的呢?移动它的最简单方法是:
直接在表之间传输数据:
UPDATE cl
SET cl.Photo = src.SomeField
FROM Client cl
INNER JOIN SomeTable src
ON src.JoinField = cl.JoinField
WHERE something? = somethingElse?;
使用VARBINARY(MAX)
变量:
DECLARE @Photo VARBINARY(MAX);
SELECT @Photo = src.photo
FROM SomeTable src
WHERE src.SomeField = ?;
UPDATE cl
SET cl.Photo = @Photo
FROM Client cl
WHERE cl.[id] = '40946b09-81be-42b0-ae62-63182acb1e89';
答案 1 :(得分:1)
为什么不直接使用SQL语句复制它,而不是从SSMS复制/粘贴?
我将留下一个示例来复制另一个客户端的数据(例如,伪造id
):
UPDATE client
SET Photo = (SELECT Photo FROM client WHERE id='00000000-0000-0000-0000-000000000000')
WHERE id='40946b09-81be-42b0-ae62-63182acb1e89';