簡體   English   中英

傳遞int的參數化查詢列表返回錯誤ora-01722

[英]Passing parameterized query list of int's returns error ora-01722

使用oledb提供程序。 查詢是這樣的:

SELECT appid 
  FROM table 
 WHERE response_id IN (?)

我獲取一個int數組並將其發送到一個方法,該方法在數組值之間添加逗號分隔符,並返回一個字符串。 然后將該字符串作為參數發送。

如果我有一個值可以通過,這可以正常工作,但是當我發送兩個值時,我得到ORA-01722錯誤。

我已經嘗試查看v_$sql表以查看正在執行的內容,但它沒有顯示我的頁面執行的查詢。 我只能看到我通過toad執行的操作,即使我在兩種情況下都使用相同的登錄。 不確定是否有其他表存儲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;
    }
}

不幸的是,您不能將逗號分隔的字符串作為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提供程序。 我想這限制了可能性? (我從未使用過該提供商,所以我不知道)。 也許是時候換了?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM