【发布时间】:2018-06-01 14:33:35
【问题描述】:
我遇到了一个问题,我不知道应该如何传入 C# 类型为 string 而 Oracle 类型为 Varchar2 的 Oracle 参数。
目前,我将这个string 作为CMS','ABC 传递,认为Oracle 将添加围绕这个string 的'',使其成为一个看起来像'CMS','ABC' 的varchar2。
这适用于单个string,如CMS,但当值较长时,如IN (list) 命令中的典型值,参数将无法正确传递。
这也是我指的代码。
string sql = 'SELECT name FROM Pers p WHERE p.FirstName IN (:names)';
当传入的:names 的值为CML 且不带任何引号时,以下方法有效。
OracleParameter param = new OracleParameter(":names", OracleDbType.Varchar2, "CML", ParameterDirection.Input);
当传入的:names 的值为CML','ABC 并带有引号时,下面的内容不起作用。
OracleParameter param = new OracleParameter(":names", OracleDbType.Varchar2, "CML','ABC", ParameterDirection.Input);
这是为什么呢?
Oracle 是否在将参数传递到 sql 语句时在参数周围添加单引号?为什么它不在第二种情况下添加引号?
【问题讨论】:
-
ODP.NET 不支持带有
IN子句的参数。见:stackoverflow.com/questions/1625649/… -
当
:names只是CML时有效,因此它与IN子句绑定得很好。 -
嗯,是的,我上面的评论不太正确,我应该说:ODP.NET 参数不适用于多个逗号分隔值。
标签: c# sql oracle parameterized-query