gpt4 book ai didi

sql - 如何 SQL 使用 VBScript(或 VB6)从字节/整数数组插入原始/二进制字段值?

转载 作者:行者123 更新时间:2023-12-04 18:49:05 25 4
gpt4 key购买 nike

有谁知道如何使用 SQL 并理想地在 ADO(经典)和 VBScript(或 Visual Basic 6)中将几个字节传递到 Binary(或 varbinary)字段中?

我希望编码 10-20(可能更多)字节的数据并将这些数据存储在 SQL db 字段中。 (它不是 MS-SQLSVR,但我希望支持标准 SQL 的格式可以工作!)

字节可以作为通过 AscB/ChrB 获得的字节串或“字节”数组(实际上是通过“cbyte”获得的字节类型的变体)并存储在数组中。

第一个选项:使用字符串格式
我在创建 SQL 插入时取得了一些(有限的)成功:

x = ".>?hD-&91k[="    '<psuedo string of chars, some unprintable
Insert Into rawtest (byt) Values (CAST('" & x & "' as SQL_BINARY(12)))

但我担心字符串空值会截断字段中的数据,其他非打印控制字符会妨碍处理数据。有没有办法避免这种情况?

第二个选项:字节数组
我可以很容易地将数据放入数组中,但看不到如何传递给 SQL Insert 语句。如果我尝试传入 12 个字节,由于 CAST 尝试将数据存储到整数(4 个字节)中,因此插入失败。如果我传入一个字节,它就可以工作,例如:
x = a(0)

并继续工作 4 个字节,但在 Integer 溢出时失败。此外,它重新排序数据

我尝试使用各种解决方法:
Insert Into rawtest (byt) Values (CAST('12,34,45' as SQL_BINARY(12)))
Insert Into rawtest (byt) Values (CAST(&h12&h34 as SQL_BINARY(12)))
Insert Into rawtest (byt) Values (CAST(0x123456789012 as SQL_BINARY(12)))

我也尝试过类似的组合:
Insert Into rawtest (byt) Values (CONVERT('" & x & "', SQL_BINARY)

但这些都失败了!

理想情况下,我想要一个方法,任何方法,它需要一个最多 20 个字节的小二进制数组(理想情况下是完整的字节范围 0-255,但可能需要更少)并将它们传递到一个普通的、原始的、二进制 SQL 字段。

理想情况下,我需要在 VBScript/ADO 中执行此操作,但可以采用基于 VB6 的解决方案(如果可用)。我希望这是“原始”二进制文件,我不想使用像 Base64 这样的 ascii 编码。

我一直在谷歌搜索,直到我 NumPy 了,并且没有发现与 SQL 中的二进制字段相关的太多内容。

你能帮我吗?任何答案表示赞赏。许多谢谢。

最佳答案

经典 ADO 可以直接操作非常大 (>8000) 的 varbinary 和图像 (blob) 字段而无需分块。下面是一个针对 MS SQL Server 的示例,该示例将二进制数据插入到具有 INT ID 字段和 varbinary(100) 字段的表中。在这个例子中,一个参数化的 SQL 查询从一个 Variant 插入二进制数据。 Variant 只需要填充二进制数据。

Dim vntBlobData As Variant
vntBlobData = "ReplaceThisWithBinaryData - A byte array will work"

Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider = sqloledb; Data Source = DBServerName; Initial Catalog = DBName; User ID = UserID; Password = Password; Persist Security Info = False"
cn.Open

Dim strQry As String
strQry = "INSERT INTO TestBinaryTable (ID, BlobData) VALUES (?, ?)"

Dim cm As ADODB.Command
Set cm = New ADODB.Command
cm.ActiveConnection = cn
cm.CommandText = strQry
cm.Parameters.Append cm.CreateParameter("@ID", adInteger, adParamInput, , 1)
cm.Parameters.Append cm.CreateParameter("@BlobData", adVarBinary, adParamInput, 100, vntBlobData)
cm.CommandType = adCmdText
cm.Execute

关于sql - 如何 SQL 使用 VBScript(或 VB6)从字节/整数数组插入原始/二进制字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/922366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com