У меня есть SqlDatasource
, для которого я программно создаю SelectCommand
. В общем, SqlDataSource
работает нормально, но когда я даю ему FilterParameters
и FilterExpression
, все идет наперекосяк. Ниже приведены два примера: первый возвращает 0 записей, второй возвращает все записи (15 000). Ни один из примеров не возвращает искомое подмножество записей (2839). Я совершенно сбит с толку тем, как мне настроить FilterParameters
и FilterExpression
, чтобы получить записи, которые я ищу. Я исследую это уже два дня, но безуспешно.
<asp:SqlDataSource ID="dsIAMS" runat="server" ConnectionString="<%$ ConnectionStrings:ReportsConnectionString %>" />
dl = (DropDownList)tFilters.Controls[0];
// dl.ID = dlPASUBTYPENAME
cp = new ControlParameter();
cp.Name = "cp" + dl.ID.Substring(2);
cp.ControlID = dl.ID;
cp.PropertyName = "SelectedValue";
//Attempt 1: Returns 0 records
cp.ConvertEmptyStringToNull = false;
dsIAMS.FilterParameters.Add(cp);
if (dl.SelectedItem.Text == "") {
dsIAMS.FilterExpression = dl.ID.Substring(2) + "='' ";
}
else {
dsIAMS.FilterExpression = dl.ID.Substring(2) + "='{0}'";
}
//Attempt #2: Returns all the records (15,000)
cp.ConvertEmptyStringToNull = true;
dsIAMS.FilterParameters.Add(cp);
if (dl.SelectedItem.Text == "") {
dsIAMS.FilterExpression = "ISNULL("+dl.ID.Substring(2) + ", 'null')='null' ";
}
else {
dsIAMS.FilterExpression = dl.ID.Substring(2) + "='{0}'";
}
Вот SQL-запрос, который я запускаю для самой базы данных:
SELECT * FROM IAMS
WHERE PASUBTYPENAME IS NULL
Возвращает 2839 строк.