加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 07:29:39 所属栏目:百科 来源:网络整理
导读:有没有人知道如何使用SQL将几个字节传递到二进制(或varbinary)字段,理想情况下在ADO(经典) VBScript(或Visual Basic 6)? 我希望编码10-20(可能更多)字节的数据,并将此数据存储在SQL db字段中. (它不是MS-SQLSVR,但我希望标准的SQL支持格式能够正常工作!)
有没有人知道如何使用SQL将几个字节传递到二进制(或varbinary)字段,理想情况下在ADO(经典)& VBScript(或Visual Basic 6)?

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

这些字节可用作通过AscB / ChrB获得的字节串,OR,一个’bytes’数组(实际上是通过’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的解决方案.我想把它作为’原始’二进制文件,我不想使用ascii编码,比如Base64.

我用谷歌搜索,直到我麻木,并没有发现与SQL中的二进制字段相关的很多东西.

你能帮我吗?任何答案都赞赏.很多thx.

解决方法

经典ADO可以直接操作非常大(> 8000)的varbinary和image(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,100,vntBlobData)
cm.CommandType = adCmdText
cm.Execute

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读