我正在尝试确定用于调用 SQL Server (2005) 存储过程的适当 ADO 命令参数数据类型。我首先尝试确定与 SQL Server 数据类型 varchar(MAX)
相对应的适当 ADO 数据类型。 .我想可能是adVarChar
,但我不确定。
为什么文档中没有列出每种数据类型的大小(例如“字符串”类型的字符数、数字类型的范围)?!为什么似乎不可能找到一个方便的表格来列出每种数据类型以及您可以在每种数据类型中填充的最大信息量?!您会认为有人会注意到可能有数百万个与“为什么我的数据被截断?”变体相关的问题。 ...
澄清 – 上述信息只是一个具体示例,说明了解 ADO 数据类型限制的实用性,例如选择适当的 ADO 数据类型来处理各种数据源的特定数据类型。
最佳答案
具体部分varchar(MAX)
可以从 ADO 用作输入参数。
在这种情况下,数据类型将是 adLongVarChar
, 最大长度为 &h7FFFFFFF
,如记录 here .
但它不能用作输出参数。
也不能作为返回记录中的字段类型使用(有趣 - .Value
是 Empty
,因为它实际上是一个长类型,但 GetChunk
可能不会被调用来检索实际数据,因为 ADO 认为它不是长类型)。
如果需要消费varchar(MAX)
作为使用 VBA/ADO 的输出参数,您必须 select
它将记录集返回给客户端,您必须将其转换为 text
在这样做的同时:
select cast(@var as text) as data;
return 0;
然后你会说
s = .Fields(0).GetChunk(.Fields(0).ActualSize)
从打开的记录集中获取数据。抽象部分
ADO 的关键在于抽象出不同数据源之间的差异。只要有一个支持接口(interface)的数据 Access 驱动程序,您(理想情况下)就可以与它交谈而不必担心它是什么。
作为任何抽象,这个也是 leaky .
哪些服务器的哪些数据类型映射到哪些 ADO 数据类型的确切知识来自经验。那是。
然而,一些经验法则可能会很快发展起来:
int - adInteger
datetime - adDBDate
(虽然在这里你可能会被迫进行一些试验和错误)Long
在它的名字中,在 ADO 世界中,意思是“BLOB”( adLongVarBinary
, adLongVarChar
, adLongVarWChar
)。 varchar(10)
)varchar(max)
)您要查阅相应的数据源,而不是 ADO。
关于ms-access - ADO 数据类型的限制是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6905003/