gpt4 book ai didi

c# - IN 查询的绑定(bind)变量

转载 作者:行者123 更新时间:2023-11-30 21:14:56 25 4
gpt4 key购买 nike

在使用绑定(bind)变量时没有获取值

eg,, SELECT * FROM EMP WHERE USER IN (:VALUES)

如果我使用上面的查询,它不会执行

直接传递值

SELECT * FROM EMP WHERE USER IN (+ arraylist +) 工作正常

========================================

这是示例代码

string[] Myarray = ListVal.split(','); Query = "SELECT * FROM EMP WHERE USER IN (:VALUES)"

OracleParameter Param = { new OracleParameter (":VALUES",OracleDBType.Array)

};

Param[0].value = Myarray;

using(dr = OracleFactory.ExecuteReader(CommandType.Text,Query,true,Param)) {

}

在执行这个时我得到了一个异常

无效的参数绑定(bind) ParameterName VALUES

最佳答案

您需要将值作为数组传递并稍微修改查询。以下代码适用于 ODP.NET。我不知道是否也可以使用 Microsoft 已弃用的 Oracle 驱动程序来完成。

首先,您需要定义一个表类型(例如VARCHAR):

CREATE TYPE varchar_table AS TABLE OF VARCHAR2(2000); 

当您为查询创建参数时,将其声明为关联 PL/SQL 数组:

OracleParameter param1 = new OracleParameter(); 
param1.OracleDbType = OracleDbType.Varchar2;
param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

然后分配一些值:

param1 = new string[2] { "johnp", "billt" }; 

并且您的查询需要转换:

SELECT * FROM EMP WHERE USER IN (TABLE(CAST(:values AS varchar_table)))

关于c# - IN 查询的绑定(bind)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5989482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com