ODP.NET 是存储过程所需的 OracleParameter 字段吗?

Posted

技术标签:

【中文标题】ODP.NET 是存储过程所需的 OracleParameter 字段吗?【英文标题】:ODP.NET are OracleParameter fields required for a stored procedure? 【发布时间】:2012-12-10 15:37:07 【问题描述】:

有谁知道不为 OracleParameter 设置所有字段值以执行存储过程的后果?

比如是否需要提供OracleDbTypeEx、Size?

我只需提供名称、值、inOrOut?

你怎么看?

谢谢。

【问题讨论】:

【参考方案1】:

对于输入参数,如果未指定,则从值推断类型。这就是说为了代码的整洁性和可维护性,我倾向于不为输入设置这些属性,使用与 SqlCommand 类上的 AddWithValue 方法类似的方法中的 Parameters.Add 方法:cmd.Parameters.Add("myvarname", varvalue)。

另一方面,长度确实会改变行为。 IIRC,如果您不指定长度,则当值长度超过参数长度时会引发一种溢出异常。如果您确实设置了长度,则输入将被修剪为该长度,至少在 String/Varchar 的情况下。我倾向于避免设置长度,因为我更愿意收到截断警报,而是限制前端的输入。

输出参数是另一回事。不设置输出变量类型和长度往往会导致“字符串缓冲区太小”和“非法变量名称/编号”,因此在大多数情况下,您确实需要为输出参数设置这些属性。

【讨论】:

以上是关于ODP.NET 是存储过程所需的 OracleParameter 字段吗?的主要内容,如果未能解决你的问题,请参考以下文章

ODP.NET 过程编译

在 odp.net 上使用带有 number 属性的 oracle 对象类型

odp.net 可以将参数传递给布尔 pl/sql 参数吗?

有没有办法通过 mysqlworkbench 更改存储过程所需的权限?

如何使用 ODP.Net 传递字节数组?

将字节数组传递给 oracle 存储过程