Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 在32位MS ODBC(C++)应用程序中访问超过40亿行_Visual C++_64 Bit_Odbc_32 Bit - Fatal编程技术网

Visual c++ 在32位MS ODBC(C++)应用程序中访问超过40亿行

Visual c++ 在32位MS ODBC(C++)应用程序中访问超过40亿行,visual-c++,64-bit,odbc,32-bit,Visual C++,64 Bit,Odbc,32 Bit,我有一个32位应用程序,它必须连接到32位和64位ODBC数据库。我看到一些MS ODBC函数对于32位和64位构建具有不同的签名。这似乎意味着只有64位应用程序才能使用64位索引。是这样吗?在64位ODBC API中,一些参数现在是8字节,以前是4字节。但是,很少与行数有关,更多的与字段大小有关,例如lob。您引用的API返回受影响的行数,我所知道的任何驱动程序都不会在select上为SQLRowCount设置-1以外的任何值。因此,对于SQLRowCount,您只需要担心是否要一次更新/删除

我有一个32位应用程序,它必须连接到32位和64位ODBC数据库。我看到一些MS ODBC函数对于32位和64位构建具有不同的签名。这似乎意味着只有64位应用程序才能使用64位索引。是这样吗?

在64位ODBC API中,一些参数现在是8字节,以前是4字节。但是,很少与行数有关,更多的与字段大小有关,例如lob。您引用的API返回受影响的行数,我所知道的任何驱动程序都不会在select上为SQLRowCount设置-1以外的任何值。因此,对于SQLRowCount,您只需要担心是否要一次更新/删除20亿行,并且需要更改/删除这些行的计数。如果您真的要一次更新/删除20亿行,您可能会遇到比是否使用32位/64位ODBC API更大的问题。

首先,您不能一次获取40亿行。如果你这样做,奇怪的事情就会发生。
第二,您所说的日期类型是SLQLEN。对于32位驱动程序,它是4字节的int,对于64位驱动程序,它是8字节的int。然而,并非所有64位驱动程序都有8字节SQLLEN。我个人使用过十几个64位odbc驱动程序,其中大约40%的驱动程序仍然使用4字节的SQLLEN,驱动程序管理器也应该使用4字节的SQLLEN,否则,在某些平台上,您会到处看到损坏的数据和内存错误。

您是否实际执行返回超过4B行的查询?ODBC可追溯到1992年,当时查询结果中有20亿行对每个人都足够好。如果您想要更多,那么您肯定会很好地利用64位进程中可用的地址空间。