ADO数据类型有哪些限制?

Ken*_*itt 4 ms-access vba ado

我正在尝试确定用于调用SQL Server(2005)存储过程的相应ADO命令参数数据类型.我特别首先尝试确定与SQL Server数据类型相对应的适当ADO数据类型varchar(MAX).我想可能是adVarChar,但我不确定.

为什么文档中列出的每种数据类型的大小(例如'字符串'类型的字符数,数值类型的范围)?为什么看起来似乎不可能找到一个方便的表格列出每种数据类型以及每种数据类型的最大信息量?您认为有人会注意到与"为什么我的数据被截断?"的变体相关的数百万个问题....

澄清 - 以上信息仅仅是一个具体示例,说明了解ADO数据类型限制的实用性,例如选择适当的ADO数据类型来处理各种数据源的特定数据类型.

GSe*_*erg 9

具体部分

varchar(MAX)可以从ADO用作输入参数.
在这种情况下,数据类型将是adLongVarChar最大长度&h7FFFFFFF,如此处所述.

但它不能用作输出参数.
也不能被消耗掉在返回recordsed字段类型(有趣的- .ValueEmpty的,因为它实际上是一个长的类型,但GetChunk不能称为检索因为ADO认为它不是一个长型的实际数据).

如果您需要varchar(MAX)使用VBA/ADO作为输出参数使用,则必须将select它记录到客户端,并且您必须text在执行此操作时将其强制转换为:

select cast(@var as text) as data;
return 0;
Run Code Online (Sandbox Code Playgroud)

然后你会说s = .Fields(0).GetChunk(.Fields(0).ActualSize)从打开的记录集中获取数据.


抽象部分

ADO的重点是消除不同数据源之间的差异.只要有一个支持接口的数据访问驱动程序,您(理想情况下)可以在不打扰它的情况下与它通信.

任何抽象,这个也是漏洞.

确切了解哪些服务器映射到哪些ADO数据类型的数据类型来自经验.那是.

一些经验法则可能会很快发展:

  • 通过将其名称与特定服务器的数据类型名称相匹配来计算可能的ADO数据类型并不困难:

    • int - adInteger
    • datetime - adDBDate (虽然在这里你可能会被迫进行一些试验和错误)
  • 某些数据类型称为BLOB(二进制大对象).它们旨在包含大量数据,并且通常在数据源文档中提供.对于这些,对应的ADO数据类型是可能包含Long在它的名字,其在世界ADO,意思是"BLOB"( ,adLongVarBinary,).adLongVarCharadLongVarWChar

  • 有关数据类型的确切长度的任何信息都可以在数据源的文档中找到,而不是在ADO文档中找到.对于这样的事情:

    • 开发人员为此特定表中的特定列设置的最大长度(例如varchar(10))
    • BLOB数据类型的最大理论长度(例如varchar(max))

    您将参考相应的数据源,而不是ADO.