【问题标题】:Error when trying to call Oracle.DataAccess.Client.OracleDataAdapter.Fill()尝试调用 Oracle.DataAccess.Client.OracleDataAdapter.Fill() 时出错
【发布时间】:2012-03-26 13:58:35
【问题描述】:

当我尝试调用 Fill() 时会记录以下错误,并且我的 powershell 会话崩溃。

事件类型:错误事件源:.NET 运行时描述:.NET 运行时 版本 2.0.50727.3625 - 尝试读取或写入受保护的内存。 这通常表明其他内存已损坏。

我的脚本如下所示:

$asm = [System.Reflection.Assembly]::LoadWithPartialName(“Oracle.DataAccess”) 
$userName = "foo"
$tnsDbName = "bar"
$pass = "foobar"
$connectionString = "User Id=$userName;Password=$pass;Data Source=$tnsDbName"

$q = @"
SELECT * FROM blah WHERE blar = '5848752'
"@

$cstr = $connectionString 
$conn= New-Object Oracle.DataAccess.Client.OracleConnection($cstr)
$conn.open()
$adapter = New-Object Oracle.DataAccess.Client.OracleDataAdapter($q,$conn)
$dataset = New-Object Data.DataSet
$adapter.Fill($dataset)
$dataset.Tables[0]

如果我只通过“$adapter =”行来查看崩溃前的状态:

PS H:\> $asm.GetName()

Version        Name                                                                                         
-------        ----                                                                                         
10.2.0.100     Oracle.DataAccess  

PS H:\> $adapter.SelectCommand.Connection | fl ClientID,ConnectionTimeout,ServerVersion,State


ClientId          : 
ConnectionTimeout : 15
ServerVersion     : 10.2.0.4.0
State             : Open

我愿意接受建议!可能已经在我的计算机上完成了对 ODP.NET 的更新,但是使用它的所有其他应用程序(一些简单的 winform 应用程序)和 Toad for Oracle 都可以正常工作。

【问题讨论】:

    标签: oracle powershell odp.net


    【解决方案1】:

    你见过吗? An access violation occurs when you run a .NET Framework 2.0-based application that has a virtual call the IList, IEnumerable, or ICollection interface in an LCG (Lightweight Code Generation) method. DataSet 确实实现了 IListSource,它有一个 GetList() 方法,该方法返回一个实现 IEnumerable 的 IList。

    【讨论】:

    • 你能补充一些关于这适用的细节吗?
    • 正如知识库文章所说,似乎在某些情况下,您会收到您提到的错误(并且有一个补丁)。如果您查看 Reflector 中的 Oracle.DataAccess.Client.OracleDataAdapter,您会发现它大量使用 IListSource。可能会帮助您检查该知识库并应用补丁。也可能不会。
    • 工作机器 - 我无法加载修补程序。而且我没有反射器 :(。如果我要在任何热修复支持票上获得牵引力,我将不得不对他们采取更多的措施,而不是“可能......或者可能不会。” :(跨度>
    猜你喜欢
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多