传递 int 的参数化查询列表返回错误 ora-01722

本文关键字:列表 返回 错误 ora-01722 查询 int 参数 传递 | 更新日期: 2023-09-27 17:56:22

Using the oledb provider. 查询是这样的:

SELECT appid 
  FROM table 
 WHERE response_id IN (?)

我获取一个 int 数组并将其发送到一个在数组值之间添加逗号分隔符并返回字符串的方法。然后,此字符串将作为参数发送。

如果我有一个值要传递,这工作正常,但是当我发送两个值时,我会收到ORA-01722错误。

我尝试查看v_$sql表以查看正在执行的内容,但它没有显示我的页面执行的查询。我只能看到我通过蟾蜍执行的东西,即使我在这两种情况下都使用相同的登录名。不确定是否有其他表存储 sql 数据。

字符串生成器如下。

public string intArrayToString(int[] array)
{
    if (array != null)
    {
        string delimiter = ",";
        if (array.Length > 0)
        {
            StringBuilder builder = new StringBuilder();
            builder.Append(array[0]);
            for (int i = 1; i < array.Length; i++)
            {
                builder.Append(delimiter);
                builder.Append(array[i]);
            }                    
            return builder.ToString();
        }
        else
        {
            return string.Empty;
        }
    }
    else
    {
        return null;
    }
}

传递 int 的参数化查询列表返回错误 ora-01722

不幸的是,

您不能只将逗号分隔的字符串作为IN值。您可以做的是为每个数组元素自动生成一个绑定变量并绑定每个值,如下所示:

select appid from table where response_id in (:id1, :id2, :id3)

您使用哪个驱动程序连接到 Oracle?这里有两种不同的 odp.net 解决方案:http://forums.oracle.com/forums/thread.jspa?threadID=892457&tstart=810

编辑:我看到您使用 oledb 提供程序。我想这限制了可能性?(我从未使用过该提供程序,所以我不知道)。也许是时候切换了?