Я динамически генерирую предложение WHERE из следующего DropDownList.Я получаю ORA-00905 пропущенное ключевое слово независимо от того, добавляю ли я апострофы вручную или нет (см. Комментарий).Запуск сценария непосредственно в базе данных возвращает строки.
<asp:DropDownList ID="callsInHour" runat="server" AutoPostBack="True">
<asp:ListItem Value="1">1</asp:ListItem>
<asp:ListItem Value="4">4</asp:ListItem>
<asp:ListItem Value="8">8</asp:ListItem>
<asp:ListItem Value="12">12</asp:ListItem>
<asp:ListItem Value="24">24</asp:ListItem>
</asp:DropDownList>
Мой код
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Oracle.ManagedDataAccess.Client;
...
...
OracleCommand cmd = new OracleCommand();
string zcallz = callsInHour.SelectedValue;
//string zcallz = "'" + callsInHour.SelectedValue + "'";
string whereClause = "WHERE EFFECTIVE_DATE >= add_months(TRUNC(SYSDATE), -1)
AND effective_Date between SYSDATE - INTERVAL :zcallz HOUR and SYSDATE
AND error_Reason IS NULL";
cmd.CommandText = "SELECT " +
"acct_Id AS Account " +
"FROM t_external_notification " +
whereClause +
" ORDER BY acct_Id";
cmd.Parameters.Add(new OracleParameter("zcallz", zcallz));
OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["EXTNOTIP"].ConnectionString);
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
conn.Open();
cmd.Prepare();
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
conn.Close();
Удаление всего предложения WHERE также возвращает строки, так что это определенно проблема.Запустив трассировку по базе данных, кажется, что: zcallz передается буквально без значения.Что интересно, у меня работает очень похожий кодовый набор, но с использованием подстановочных знаков, и он работает.Спасибо