来自 .Net 的 Oracle 参数化查询

Posted

技术标签:

【中文标题】来自 .Net 的 Oracle 参数化查询【英文标题】:Oracle Parametrized Query from .Net 【发布时间】:2013-04-26 22:16:22 【问题描述】:

这是我得到的错误:ORA-01036: 非法变量名/编号

我所做的只是尝试使用这些值更新表格。值不为空,参数中的每个变量都有值。

查询在 Oracle 中执行良好(没有参数),但它给出 ORA-01036:非法变量名称/编号,当我添加参数时。

我几乎尝试了所有方法,但没有运气!!

using (OracleConnection con = new OracleConnection(cs))
            
            const string query =
                   @"UPDATE ASSOCIATED_CENTERS_INFO
SET DIS_ASSOCIATED_BY = (SELECT ID FROM VC_ADMINISTRATORS WHERE USERNAME = ':USER'),
DIS_ASSOCIATION_DATE = SYSDATE,
ACTIVE_YN = 'N', 
NOTES = CONCAT(NOTES, '<br>' || SYSDATE || ' ' || (SELECT FIRSTNAME || ',' || LASTNAME FROM VC_ADMINISTRATORS WHERE USERNAME = ':USER') || ': ' || ':COMMENT')
WHERE OSC_ID = :OSCID AND ASSOCIATED_OSC_ID = :ASSOCIATEDOSCID;";

                OracleCommand cmd = new OracleCommand(query, con);
                cmd.CommandType=CommandType.Text;

                cmd.Parameters.AddWithValue(":USER", userName);
                cmd.Parameters.AddWithValue(":COMMENT", comment);
                cmd.Parameters.AddWithValue(":OSCID", selectedIdOnMap);
                cmd.Parameters.AddWithValue(":ASSOCIATEDOSCID", selectedIdOnListBox);
                con.Open();
                cmd.ExecuteNonQuery();

【问题讨论】:

【参考方案1】:

去掉一些参数加上的单引号:

':USER', ':COMMENT' ...

【讨论】:

【参考方案2】:

将所有表名和列名放在引号中:“MY_TableName”: 喜欢:

     @"UPDATE ""ASSOCIATED_CENTERS_INFO""
   SET ""DIS_ASSOCIATED_BY "" = .......

并从参数中删除引号。

【讨论】:

以上是关于来自 .Net 的 Oracle 参数化查询的主要内容,如果未能解决你的问题,请参考以下文章

sqlsugar可以参数化查询吗

我想使用 dapper 在 Oracle 和 SQL 数据库上执行参数化查询

Oracle 的 C# 参数化查询 - 严重且危险的错误!

使用 Snowflake 进行参数化查询并从 Snowflake .NET 连接器传递值

Google Bigquery - 运行参数化查询 - php

参数化sql查询语句