如何使用C#调用Oracle存储过程_OracleCommand配置CommandType.StoredProcedure

OracleCommand.CommandType = CommandType.StoredProcedure 生效的前提是:存储过程名与CommandText完全一致(含大小写、包名),参数名、方向、类型须与PL/SQL端严格匹配,且连接字符串必须包含Unicode=True以确保字符串正确传输。OracleCommand.CommandType = CommandType.StoredProcedure 为什么没生效常见现象是调用后无报错但存储过程没执行,或返回空结果。根本原因不是 commandtype 设错了,而是没配对:oracle 存储过程名必须和 commandtext 完全一致(含大小写、包名),且参数名、方向、类型必须与 pl/sql 端严格匹配。CommandText 应设为 "pkg_name.proc_name"(带包名)或 "proc_name"(无包),不能是 "call pkg_name.proc_name()" 或带 begin/endOracle 不靠函数签名推断参数,OracleParameter 的 ParameterName 必须和存储过程中定义的参数名**完全一致**(区分大小写),哪怕只差一个下划线也会绑定失败如果存储过程有 OUT 或 IN OUT 参数,Direction 必须显式设为 ParameterDirection.Output 或 ParameterDirection.InputOutput,不能省略IN/OUT 参数怎么传才不报 ORA-06502 或 ORA-01008ORA-06502 多半是类型不匹配(比如 C# 传 int,PL/SQL 期望 NUMBER(1)),ORA-01008 是"未绑定变量",本质是参数名拼错或漏加 OracleParameter。OracleParameter 构造时,OracleDbType 要尽量选精确类型:OracleDbType.Varchar2 对应 VARCHAR2,OracleDbType.Int32 对应 NUMBER(10),别全用 OracleDbType.Decimal对于 REF CURSOR 输出参数,必须用 OracleDbType.RefCursor,且不能设 Value;执行后需用 OracleDataAdapter 或 ExecuteReader() 拿结果集如果存储过程定义了默认值的参数,C# 仍需显式添加该参数并设 Value = DBNull.Value,否则 Oracle 认为"未提供",可能触发 ORA-01008连接字符串里要不要加 Unicode=true要加,尤其当存储过程处理中文、特殊符号或使用 NVARCHAR2 类型时。不加可能导致乱码或隐式转换失败,且错误常不直接报在执行阶段,而是在取 OUT 值时崩掉。连接字符串中明确加上 Unicode=True(如 "Data Source=...;User Id=...;Password=...;Unicode=True;")即使数据库字符集是 AL32UTF8,.NET 驱动默认仍按非 Unicode 方式编码字符串,Unicode=True 才启用 UTF-16 ? UTF-8 正确转换这个配置不影响 CommandType 行为,但会影响所有字符串参数的传输准确性,漏掉它,前面参数全对也白搭执行后读不到 REF CURSOR 返回的数据集不是没返回,是没用对方式。Oracle 的 REF CURSOR 不能像 SQL 查询那样直接 ExecuteScalar() 或当普通输出参数取值,它本质是个游标句柄,得用数据适配器或专门的读取逻辑。 arXiv Xplorer ArXiv 语义搜索引擎,帮您快速轻松的查找,保存和下载arXiv文章。

相关推荐
_Jimmy_7 小时前
Agent 溯源精度提升方案
人工智能·python·langchain
衣乌安、7 小时前
数据库事务原理与回滚机制
数据库
CodexDave8 小时前
PostgreSQL 明明有索引却选了 Nested Loop:从行数误判修正执行计划
数据库·postgresql·执行计划·扩展统计·nestedloop
SamChan908 小时前
在Web应用中集成PDF多语言翻译功能:PDFTranslator API实战指南
前端·python·ai·pdf·yapi·机器翻译
天天进步20158 小时前
Python全栈项目--智能办公自动化系统
开发语言·python
颜酱8 小时前
09 | 重构项目结构
人工智能·python·langchain
czhaii9 小时前
STC ai助手单片机工程项目创建实例
数据库·mongodb
山峰哥9 小时前
数据库性能救星:Explain执行计划深度拆解
服务器·开发语言·数据库·sql·启发式算法
程序员天天困9 小时前
Arthas ognl 表达式从入门到实战:掌握在线调试最强的表达式引擎
java·jvm·后端
oradh10 小时前
Oracle 11g rac IP地址修改(public ip、vip、scan ip、priviate ip)
数据库·tcp/ip·oracle·rac ip地址修改