У меня есть SqlDatasource
, для которого я программно создаю SelectCommand
. В общем, SqlDataSource
отлично работает, но когда я даю FilterParameters
и FilterExpression
, все идет не так. Ниже приведены два примера: первое возвращение 0 записей, второе - все записи (15 000). Ни один из примеров не возвращает подмножество записей, которые я ищу (2,839). Я полностью одурманен тем, как я должен настроить FilterParameters
и FilterExpression
, чтобы получить записи, которые я ищу. Я исследовал это уже два дня без везения.SqlDataSource 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 строк.