从C#中的Oracle函数返回错误“按顺序提取”表,其中函数使用dblink到SQL Server
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从C#中的Oracle函数返回错误“按顺序提取”表,其中函数使用dblink到SQL Server,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2503字,纯文字阅读大概需要4分钟。
内容图文
![从C#中的Oracle函数返回错误“按顺序提取”表,其中函数使用dblink到SQL Server](/upload/InfoBanner/zyjiaocheng/885/c5c3d49a8edf49dfbe8806fa13b8dd33.jpg)
在C#代码中,我试图从Oracle函数加载数据表.该函数具有SYS_REFCURSOR返回类型.这是我的代码,尝试使用以下函数填充DataTable dt:
using (var connection = new OracleConnection(connstring))
{
connection.Open();
using (var command = new OracleCommand())
{
command.Connection = connection;
command.CommandText = "FNC_AXA_APPTS";
command.CommandType = CommandType.StoredProcedure;
OracleParameter retVal = new OracleParameter("PRS", OracleDbType.RefCursor);
retVal.Direction = ParameterDirection.ReturnValue;
command.Parameters.Add(retVal);
command.Parameters.Add(new OracleParameter("EG_PARAM", OracleDbType.Varchar2, 50)).Value = paramValue;
command.ExecuteNonQuery();
using (OracleDataReader reader = ((OracleRefCursor)command.Parameters["PRS"].Value).GetDataReader())
{
dt.Load(reader);
}
}
}
在某些情况下,Oracle函数使用到SQL数据库的dblink.在这些情况下,我会遇到以下例外情况…
ORA-01002: fetch out of sequence
ORA-02063: preceding line from GATE_LINK
…其中GATE_LINK是dblink.到目前为止,我的研究证实问题必须出在dblink上.
我们正在使用.NET的Oracle数据提供程序-这是否可能不支持到SQL Server的dblink?否则,我可以在SQL端配置什么来解决此问题?
我应该提到,我们正在通过VPN连接到Oracle数据库,并且连接字符串使用以下格式:
"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={1}))(CONNECT_DATA=(SERVICE_NAME={2})));User Id={3};Password={4};"
提前致谢…
解决方法:
在花了一天的时间进行调查之后,我在发布问题后仅10分钟就被引导到答案.典型!
在这里找到了答案-https://community.oracle.com/thread/659625-所需要做的就是将调用代码包装在事务中.工作代码如下所示:
using (var connection = new OracleConnection(connstring))
{
connection.Open();
using (var command = connection.CreateCommand())
{
// Start a local transaction
using (var transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted))
{
// Assign transaction object for a pending local transaction
command.Transaction = transaction;
command.CommandText = "FNC_AXA_APPTS";
command.CommandType = CommandType.StoredProcedure;
OracleParameter retVal = new OracleParameter("PRS", OracleDbType.RefCursor);
retVal.Direction = ParameterDirection.ReturnValue;
command.Parameters.Add(retVal);
command.Parameters.Add(new OracleParameter("EG_PARAM", OracleDbType.Varchar2, 50)).Value = paramValue;
command.ExecuteNonQuery();
using (OracleDataReader reader = ((OracleRefCursor)command.Parameters["PRS"].Value).GetDataReader())
{
dt.Load(reader);
}
}
}
}
我对该解决方案的有限了解是,如果没有此解决方案,则在SQL Server端提交事务,一旦传递给.NET代码,该事务将导致返回的游标在其迭代中失败.如果有人有更好的解释,请添加此问题.
内容总结
以上是互联网集市为您收集整理的从C#中的Oracle函数返回错误“按顺序提取”表,其中函数使用dblink到SQL Server全部内容,希望文章能够帮你解决从C#中的Oracle函数返回错误“按顺序提取”表,其中函数使用dblink到SQL Server所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。