2014-01-03 3 views
0

У меня есть 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 строк.

ответ

0

Я сдался. В дополнение к FilterExpression и FilterParameters, я пробовал SelectParameters с теми же результатами. Я решил просто жестко закодировать весь SelectCommand каждый раз. Параметры просто не работают. Я всегда ненавидел их, потому что они просто не справлялись с NULL. Во время моего диагноза я даже запускал SQL Server Profiler для отслеживания связи с Visual Studio и когда этот параметр не использовался (т. Е. Была использована часть «ISNULL»), запрос никогда даже не отправлялся на SQL-сервер. В итоге я использовал следующий код:

<asp:SqlDataSource ID="dsIAMS" runat="server" ConnectionString="<%$ ConnectionStrings:ReportsConnectionString %>" /> 

dl = (DropDownList)tFilters.Controls[0]; 
// dl.ID = dlPASUBTYPENAME 
if (dl.SelectedItem.Text == "") { 
    dsIAMS.SelectCommand+=dl.ID.Substring(2) + " IS NULL"; 
} 
else { 
    dsIAMS.SelectCommand+=dl.ID.Substring(2) + "='" + dl.SelectedItem.Text + "'"; 
} 
Смежные вопросы