asp.net和Oracle单引号自动转义

时间:2016-06-27 12:50:53

标签: asp.net vb.net oracle oracle11g

通常情况下,ASP.Net(我认为它正在做它)会在调用程序时用单引号做出魔法。例如,以下内容可以正常工作......

dim aThing as string = "you're not as cool as your dog"
...
cmd.CommandText = "pkg_cool.s_you"
cmd.Parameters.Add(New OracleParameter("iSomeVar", OracleDbType.Varchar2)).Value = aThing
cmd.executeNonQuery()

该软件包具有简单的更新查询

insert into someTable (colName)values(iSomeVar)

现在,如果我在ASP中执行相同的操作,但是将包更改为使用execute immediate,则需要对单引号进行转义;我是在asp replace(aThing,"'","''")中做到的。有人可以解释原因吗?

-- the following will work fine if the asp variable "aThing" does not contain an apostrophe.
execute immediate
'insert into ' || vTableName || '(' || colName || ')values(''' || iSomeVar || ''')';

SQL Error: ORA-00917: missing comma

1 个答案:

答案 0 :(得分:1)

它是逃避撇号的RDBMS(关系数据库管理系统),而不是.NET。我猜execute immediate使用文字字符串,因为它是为汇编动态SQL而设计的。