列具有 NULL 值时出现“内部 .Net Framework 数据提供程序错误 30”错误

Posted

技术标签:

【中文标题】列具有 NULL 值时出现“内部 .Net Framework 数据提供程序错误 30”错误【英文标题】:Getting "Internal .Net Framework Data Provider error 30" error when column has NULL value 【发布时间】:2010-11-15 14:43:40 【问题描述】:

我有一个简单的 .NET 控制台程序,它使用 OdbcDataReader 从 Advantage Local Server 获取行。 我在 Windows 7 上使用通过 ODBC 管理器定义的系统 DSN。 数据源使用 Advantage StreamlineSQL ODBC 驱动程序 v 10.00.00.03 和以下参数:

数据库路径: 表类型:优势可用 服务器类型:本地服务器 (ALS)

程序运行良好,直到遇到列中具有 NULL 值的行。 然后我得到一个例外:

System.InvalidOperationException was caught   Message=Internal .Net Framework Data Provider error 30.   Source=System.Data   StackTrace:
       at System.Data.ProviderBase.DbBuffer.Validate(Int32 offset, Int32 count)
       at System.Data.ProviderBase.DbBuffer.PtrToStringUni(Int32 offset, Int32 length)
       at System.Data.Odbc.OdbcDataReader.internalGetString(Int32 i)
       at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i, TypeMap typemap)
       at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i)
       at System.Data.Odbc.OdbcDataReader.IsDBNull(Int32 i)
       at OdbcTest.Program.Main(String[] args) in c:\abcoa\visual studio 2010\Projects\OdbcTest\OdbcTest\Program.cs:line 66   InnerException:

VS2010 中的 Intellisence 也给出了以下提示: *_COMPlusExceptionCode = -532462766*

我还打开了 ODBC 跟踪,并且可以在 SQL.LOG 中看到以下错误:

OdbcTest.vshost b34-11e4    EXIT  SQLSetStmtAttrW  with return
code -1 (SQL_ERROR)
        SQLHSTMT            0x0037C6D8
        SQLINTEGER                1228 <unknown>
        SQLPOINTER          [Unknown attribute 1228]
        SQLINTEGER                  -5 

        DIAG [HY092] [iAnywhere Solutions][Advantage ODBC
Driver]Invalid attribute identifier. (2184) 

OdbcTest.vshost b34-11e4    ENTER SQLGetDiagFieldW 
        SQLSMALLINT                  3 
        SQLHANDLE           0x0037C6D8
        SQLSMALLINT                  1 
        SQLSMALLINT                  4 
        SQLPOINTER         0x05ABE480
        SQLSMALLINT                 12 
        SQLSMALLINT *       0x05ABE548

如果有人能提供帮助,我将不胜感激!

【问题讨论】:

您正在调用IsDBNull(),当列实际为NULL 时它会引发异常? @Pieter 正确!我什至尝试了简单的赋值(var obj = reader[colIdx];),它在那时抛出异常...... 【参考方案1】:

联系 Sybase 的 Advantage.ODBC 新闻组后,有人建议这可能是一个错误,已在即将发布的新版本中修复。我还可以通过通过优势@sybase.com 联系 Sybase 并要求他们提供 ODBC 的 10.0.0.5 版本来获得新版本的驱动程序 司机。

【讨论】:

以上是关于列具有 NULL 值时出现“内部 .Net Framework 数据提供程序错误 30”错误的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Sqlite3 中添加默认值为 NULL 的 NOT NULL 列

CodeIgniter:我在提交注册表时出现此数据库错误 1048。

从具有特定结构的 json 解码数据时出现问题

no_data_found 时出现异常,我想将两个变量分配给 null

查找找到值的单元格计数时出现python错误

创建具有大 (>1GB) BytesWritable 值大小的 SequenceFile 时出现 NegativeArraySizeException