导读
- C# Oracle 游标获取数据集 https://www.oracle.com/technetwork/database/williams-refcursors-089902-zhs.html
- 正文:语句执行时遇到“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。” (Attempted to read or write protected memory. This is often an indication that other memory has been corrupted Locked)
-解决:先检查代码中所有参数的方向、类型
还以为Oracle游标获取数据集有多难,结果原来Oracle官网就有对应的例子。毕竟不熟悉Oracle,给过来的PL/SQL很复杂,一下子把我吓到了。
我用的是Oracle自己的DataAccess.DLL,并没有用C#自己封装的OLEDB。 由于写的仓促, 首次测试的时候没有发现复制参数修改的时候,param a copy 为param b 的时候,本来打算 param b的方向修改为output, 结果定义的名字忘记改了,也就是param a的方向被修改为output,导致方向出错,调用的时候出错。 因为in 的参数不允许输出, Oracle报错尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
我没有认真检查,还查了很多相关的文章, 最后检查还是自己代码出错了。
如果确认代码没有出错, 最好检查一下给过来的SQL的参数的方向是否给对了。