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 上使用带有 number 属性的 oracle 对象类型
odp.net 可以将参数传递给布尔 pl/sql 参数吗?