尝试调用Oracle.DataAccess.Client.OracleDataAdapter.Fill()时出错()
问题描述:
当我尝试调用Fill()并且我的powershell会话崩溃时,会记录以下错误。尝试调用Oracle.DataAccess.Client.OracleDataAdapter.Fill()时出错()
事件类型:错误事件来源:.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]
如果我只能通过跑起来“$适配器=”行,看在崩溃之前国家的事情,我有:
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都可以正常工作。
答
你见过? 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确实实现了具有方法GetList()的IListSource,该方法返回实现IEnumerable的IList。
请问您可以添加一些关于此处的细节吗? – slipsec 2012-03-26 21:29:44
正如KB文章所述,似乎在某些情况下,您会遇到您提到的错误(并且有补丁)。如果你看看Reflector中的Oracle.DataAccess.Client.OracleDataAdapter,你会发现它使用了IListSource很多。可能会帮助您检查该KB并应用该修补程序。或者可能不。 – 2012-03-27 06:24:39
工作机器 - 我无法加载修补程序。我没有反射器:(如果我要获得任何支持热修补程序的支持票,我将不得不对他们采取比“可能...或可能不会” – slipsec 2012-03-27 14:50:01