惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
L
LangChain Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
罗磊的独立博客
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 叶小钗
小众软件
小众软件
博客园 - Franky
D
Docker
Google DeepMind News
Google DeepMind News
Microsoft Azure Blog
Microsoft Azure Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
宝玉的分享
宝玉的分享
C
Check Point Blog
B
Blog
V
V2EX
博客园 - 三生石上(FineUI控件)
MyScale Blog
MyScale Blog
The Cloudflare Blog
博客园 - 聂微东
博客园_首页
Engineering at Meta
Engineering at Meta

博客园 - Amonw's Weblog

.NET默认一个客户端对同一个服务器地址同时只能建立2个TCP连接 homekit2mqtt on DietPi .Net Trace->Listeners->Remove Minimum setup for Apache+AD SSO Minimum configuration for openldap to proxy multiple AD into a single search base 排列组合算法(PHP) Make Notepad++ auto close HTML/XML tags after the slash(the Dreamweaver way) ASDM through site to site VPN - Amonw's Weblog PHP, LDAPS and Apache DFS security warning and use group policy to set up internet security zones Refresh recovery area usage data after manually deleting files under recovery area Create Oracle Enterprise Manager repository data after restore a database from another server Restore Oracle database to another server .PRT extension and multiple NX versions Fix network adapter not present problem in cloned CentOS NX 8.5 License Server Firewall Setting Cisco ASA intra-interface routing How to configure windows machine to allow file sharing with dns alias (CNAME) Install unifi controller on CentOS
Oracle 12c client with .NET legacy Oracle driver
Amonw's Weblog · 2017-05-03 · via 博客园 - Amonw's Weblog

如果使用Oracle 12c Client和.NET的Oracle driver,你很可能会碰到跟下面一样的问题:

https://www.codeproject.com/Questions/876769/Oracle-client-problem-with-output-parameter

我们昨天把一个老程序移到新服务器后就遇到了。具体表现为:

一个stored procedure(StoredProcedure1)有一个output parameter,名为o_param,程序片断为:

OracleCommand oracleCommand = new OracleCommand();
oracleCommand.Connection = dbConnection;
oracleCommand.CommandText = "StoredProcedure1";
oracleCommand.CommandType = CommandType.StoredProcedure;
OracleParameter oracleParameter = new OracleParameter("o_param", OracleType.VarChar, 64);
oracleParameter.Direction = ParameterDirection.Output;
oracleCommand.Parameters.Add(oracleParameter);
oracleCommand.ExecuteNonQuery();
string text = oracleParameter.Value.ToString();
Console.WriteLine("o_param: "+text);

结果会得到一半的实际返回值。

解决方法就是上面连接里说的:

1. parameter类型改成Char然后把返回值trim掉空格:

  OracleParameter oracleParameter = new OracleParameter("o_param", OracleType.Char, 64);

  ...

  string text = oracleParameter.Value.ToString().Trim();

或:

2. 改用Oracle 11g client

最好还是改用Oracle Managed Client,因为.Net Oracle Drive已经是deprecated了。