Как вы можете использовать параметризованные операторы с DB2 Text Search? - PullRequest
1 голос
/ 02 апреля 2009

Я пробовал это:

select * from ourschema.mytable 
    where contains(mysearchablefield, @searchTerms) = 1;

Где @searchTerms был установлен на "условия поиска"

К сожалению, он только выдал ошибку:

ERROR [42610] [IBM][DB2/NT] SQL0418N A statement contains a use of a parameter marker that is not valid. SQLSTATE=42610

Есть ли способ использовать параметризованные запросы для текстового поиска с DB2? Если нет, то есть ли документ, который подробно описывает синтаксис для ручного (тьфу) экранирования поисковых терминов (цитаты и т. Д.)?

1 Ответ

0 голосов
/ 02 апреля 2009

Вместо @field вам нужно использовать «?». Все в основном одинаково.

Хорошо, вот пример кода в реальном времени.

            sqlStmt = "SELECT COMPLAINT_NUMBER, VIOLATION_NUMBER, COMMON_ADDRESS_KEY, " +
            "DEPT_CODE, DEPT_CODE_DESC, DIVISION_CODE, DIVISION_CODE_DESC, " +
            "EMPLOYEE_NAME, COMPLAINT_CODE, COMPLAINT_CODE_DESC, COMPLAINT_DATE, " +
            "COMMON_ADDRESS_OWNER, RESOLUTION_CODE, 1 AS SORTORDER " +
            "FROM QMFILES/NVMASTP " +
            "WHERE VCLOSEDATE = 0 AND " +
            "DEPT_CODE LIKE @DEPT_CODE1 AND " +
            "DIVISION_CODE LIKE @DIVISION_CODE1 AND " +
            "COMPLAINT_DATE BETWEEN @FROM_COMPLAINT_DATE1 AND @TO_COMPLAINT_DATE1 " +
            statusQry +
            "UNION " +
            "SELECT COMPLAINT_NUMBER, VIOLATION_NUMBER, COMMON_ADDRESS_KEY, " +
            "DEPT_CODE, DEPT_CODE_DESC, DIVISION_CODE, DIVISION_CODE_DESC, " +
            "EMPLOYEE_NAME, COMPLAINT_CODE, COMPLAINT_CODE_DESC, COMPLAINT_DATE, " +
            "COMMON_ADDRESS_OWNER, RESOLUTION_CODE, 2 AS SORTORDER " +
            "FROM QMFILES/NVMASTP " +
            "WHERE VCLOSEDATE <> 0 AND " +
            "DEPT_CODE LIKE @DEPT_CODE2 AND " +
            "DIVISION_CODE LIKE @DIVISION_CODE2 AND " +
            "COMPLAINT_DATE BETWEEN @FROM_COMPLAINT_DATE2 AND @TO_COMPLAINT_DATE2 " +
            statusQry +
            "ORDER BY DEPT_CODE, DIVISION_CODE, COMPLAINT_CODE, SORTORDER";

        iDB2Command cmd = new iDB2Command(sqlStmt, conn);
        conn.Open();
        cmd.DeriveParameters();
        conn.Close();
        cmd.Parameters["@DEPT_CODE1"].Value = dept;
        cmd.Parameters["@DIVISION_CODE1"].Value = serviceArea;
        cmd.Parameters["@DEPT_CODE2"].Value = dept;
        cmd.Parameters["@DIVISION_CODE2"].Value = serviceArea;
        cmd.Parameters["@FROM_COMPLAINT_DATE1"].Value = Convert.ToDecimal(fromDateString);
        cmd.Parameters["@TO_COMPLAINT_DATE1"].Value = Convert.ToDecimal(toDateString);
        cmd.Parameters["@FROM_COMPLAINT_DATE2"].Value = Convert.ToDecimal(fromDateString);
        cmd.Parameters["@TO_COMPLAINT_DATE2"].Value = Convert.ToDecimal(toDateString);

Надеюсь, это поможет вам больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...