我在 Oracle 中有一个存储过程,如下所示:
CREATE PROCEDURE MY_TEST_PROC(
CUR OUT SYS_REFCURSOR,
PARAM_THAT_WILL_BE _USED_INSIDE_WHERE_IN
)
AS
BEGIN
OPEN CUR FOR
SELECT *
FROM MY_TABLE
WHERE COL1 IN (here I want to put values received from C#)
END;
在 ASP.NET 应用程序端,我有一个带有多个选项的选择元素。我想在我的 WHERE 子句中使用这些列表项。我知道我可以在我的存储过程中有一个 VARCHAR2 输入参数,从列表项中创建一个逗号分隔的字符串,然后将其发送到过程。这样做有两个问题:
- 我让我的网站容易受到 SQL 注入的攻击
- 在我的存储过程中,我必须使用我想避免的 EXECUTE ('SELECT ...') 模式。
如何将这些列表项发送到存储过程并在 WHERE IN 子句中使用它们?我正在使用 ODP.NET,听说过 UDT,但不知道如何使用它。