Vertica 8.1 ADO.NET X64 驱动程序在 x64 Build 中抛出异常
Vertica 8.1 ADO.NET X64 driver throws exception in x64 Build
使用 docs 中的示例:
Building Console APP (.NET 4.6.1) "prefer 32-bit" 已检查,它工作正常并且连接打开。 但是当我取消选中 "prefer 32-bit" 它会在
中抛出异常
_conn.Open();
Faulting application name: VerticaTest.exe, version: 1.0.0.0, time stamp: 0x595cfac6
Faulting module name: ntdll.dll, version: 6.3.9600.18696, time stamp: 0x5915ecd6
Exception code: 0xc0000374
Fault offset: 0x000e61f4
Faulting process id: 0x2a0c
Faulting application start time: 0x01d2f5a312570f3a
Faulting application path: C:\VerticaTest\VerticaTest.exe
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
Report Id: 502e9318-6196-11e7-80bf-005056c00008
Faulting package full name:
Faulting package-relative application ID:
我尝试调试转储但没有额外显示,因为 Vertica 不为驱动程序提供调试符号。
重现此问题非常简单:只需在测试官方文档中的任何 Vertica 示例时取消选中项目属性中的 "prefer 32-bit"。
同样在Windows服务构建中,所有构建模式总是发生崩溃!
我比较了 MySQL .net 连接器,它在所有模式下都能很好地与 Vertica 驱动程序和 CorFlags 显示没有区别!
C:\Program Files (x86)\Microsoft Visual Studio 14.0>corflags D:\Development\VS2015\Vertica.NET64-8.1.0.0\Vertica.Data.dll
Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.6.1055.0
Copyright (c) Microsoft Corporation. All rights reserved.
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 0x9
ILONLY : 1
32BITREQ : 0
32BITPREF : 0
Signed : 1
C:\Program Files (x86)\Microsoft Visual Studio 14.0>corflags D:\Development\VS2015\mysql-connector-net-6.9.9-noinstall\v4.5\MySql.Data.dll
Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.6.1055.0
Copyright (c) Microsoft Corporation. All rights reserved.
Version : v4.0.30319
CLR Header: 2.5
PE : PE32
CorFlags : 0x9
ILONLY : 1
32BITREQ : 0
32BITPREF : 0
Signed : 1
我启用了所有日志,但在异常发生之前没有任何记录!
vConStrBuilder.PreloadLogging = true;
VerticaConnection verticaConn = new VerticaConnection(vConStrBuilder.ToString());
VerticaLogProperties.SetLogLevel(VerticaLogLevel.Trace, false);
VerticaLogProperties.SetLogPath("C:\VerticaTest\vlog.log", false);
VerticaLogProperties.SetLogNamespace("_verticaNS_", false);
问题已在 ADO.NET 驱动程序版本 8.1.1.0 中解决,捆绑在 "VerticaSetup-8.1.1-0.exe" 中:
VER-54851
Client Drivers - ADO Client Drivers - Misc
Due to a non-deterministic error, connecting to Vertica using the 8.1
ADO connector previously failed with heap corruption.
参考:https://my.vertica.com/docs/ReleaseNotes/8.1.x/Vertica_8.1.x_Release_Notes.htm#8.1.0-5
使用 docs 中的示例:
Building Console APP (.NET 4.6.1) "prefer 32-bit" 已检查,它工作正常并且连接打开。 但是当我取消选中 "prefer 32-bit" 它会在
中抛出异常_conn.Open();
Faulting application name: VerticaTest.exe, version: 1.0.0.0, time stamp: 0x595cfac6
Faulting module name: ntdll.dll, version: 6.3.9600.18696, time stamp: 0x5915ecd6
Exception code: 0xc0000374
Fault offset: 0x000e61f4
Faulting process id: 0x2a0c
Faulting application start time: 0x01d2f5a312570f3a
Faulting application path: C:\VerticaTest\VerticaTest.exe
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
Report Id: 502e9318-6196-11e7-80bf-005056c00008
Faulting package full name:
Faulting package-relative application ID:
我尝试调试转储但没有额外显示,因为 Vertica 不为驱动程序提供调试符号。
重现此问题非常简单:只需在测试官方文档中的任何 Vertica 示例时取消选中项目属性中的 "prefer 32-bit"。
同样在Windows服务构建中,所有构建模式总是发生崩溃!
我比较了 MySQL .net 连接器,它在所有模式下都能很好地与 Vertica 驱动程序和 CorFlags 显示没有区别!
C:\Program Files (x86)\Microsoft Visual Studio 14.0>corflags D:\Development\VS2015\Vertica.NET64-8.1.0.0\Vertica.Data.dll
Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.6.1055.0
Copyright (c) Microsoft Corporation. All rights reserved.
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 0x9
ILONLY : 1
32BITREQ : 0
32BITPREF : 0
Signed : 1
C:\Program Files (x86)\Microsoft Visual Studio 14.0>corflags D:\Development\VS2015\mysql-connector-net-6.9.9-noinstall\v4.5\MySql.Data.dll
Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.6.1055.0
Copyright (c) Microsoft Corporation. All rights reserved.
Version : v4.0.30319
CLR Header: 2.5
PE : PE32
CorFlags : 0x9
ILONLY : 1
32BITREQ : 0
32BITPREF : 0
Signed : 1
我启用了所有日志,但在异常发生之前没有任何记录!
vConStrBuilder.PreloadLogging = true;
VerticaConnection verticaConn = new VerticaConnection(vConStrBuilder.ToString());
VerticaLogProperties.SetLogLevel(VerticaLogLevel.Trace, false);
VerticaLogProperties.SetLogPath("C:\VerticaTest\vlog.log", false);
VerticaLogProperties.SetLogNamespace("_verticaNS_", false);
问题已在 ADO.NET 驱动程序版本 8.1.1.0 中解决,捆绑在 "VerticaSetup-8.1.1-0.exe" 中:
VER-54851
Client Drivers - ADO Client Drivers - Misc
Due to a non-deterministic error, connecting to Vertica using the 8.1 ADO connector previously failed with heap corruption.
参考:https://my.vertica.com/docs/ReleaseNotes/8.1.x/Vertica_8.1.x_Release_Notes.htm#8.1.0-5