【发布时间】:2018-10-26 01:48:40
【问题描述】:
我被困住了。我正在尝试将一张图片从我的硬盘驱动器插入到VARBINARY(MAX) 类型的 SQL Server 列中。我把它转换成东西,但我什至不确定它是什么。结果看起来像“81 69 20 0 81 69 20 0 81 69 20 0 81 69 20 0 81 69 20 0 81 69 20 0 81”,但要长得多。在我的更新命令中,如果我将 $file 替换为 01234 更新没有任何问题,所以我几乎可以肯定将它转换为适当的格式是一个问题。
$i = 1
$shape|foreach{
if ($shape.Item($i).name.Substring(0, 7) -eq 'Picture')
{
#write-host $shape.Item($i).name
$shape.Item($i).copy()
#write-host $firstChart.name
$firstChart.paste()
$firstChart.Export("c:\temp\pictures\image1.jpg", "JPG")
#$firstChart.Delete
[Byte[]]$file = get-content -Encoding Byte C:\TEMP\pictures\image1.jpg
#$file = [convert]::ToBase64String((get-content C:\TEMP\pictures\image1.jpg -encoding byte))
$cmd.CommandText ="UPDATE QuoteData SET PII_Image1 = $file Where QuoteNumber = '"+$WorkSheet.Range('G7').Text.replace("'","''")+"'"
$cmd.ExecuteNonQuery()
}
$i++
}
【问题讨论】:
-
VARBINARY 存储二进制字节。为什么将其编码为 base64 字符串?正确的编码应该是十六进制的,比如 0x234fd12349767b 之类的
-
那只是一个测试。我把它注释掉了。你列出的格式就是我要找的。span>
-
这有十六进制格式的我,但我似乎无法用替换(“”,“”)摆脱空格。 $file = gc -encoding byte "c:\temp\pictures\image1.jpg" |% {("{0:x}" -f $_)};
-
你能发布$file的值吗?或者至少前十几个字符?
-
当然是“ff d8 ff e0 0 10 4a 46 49 46 0 1 1 1 0 c0”。我的想法是,如果我可以把空格去掉并在前面添加 0x,它可能会占用它。
标签: sql-server powershell