динамически создавать запрос выбора для SqlDataSource - PullRequest
0 голосов
/ 05 января 2012

У меня есть выпадающий список с некоторыми именами таблиц.Когда выбор изменяется, GridView также должен отражать изменения.

Я могу вспомнить один подход, который, вероятно, может работать - использование хранимой процедуры с параметром, указанным в качестве имени таблицы.

Но мне также интересно, есть ли другие способы достичь этого, ну, желательно без написания слишком большого количества кода.Есть идеи?Спасибо

Ответы [ 2 ]

0 голосов
/ 05 января 2012

Я бы хотел согласиться с тем, что подход хранимых процедур предпочтительнее, чем построенный SQL в обоих приведенных выше примерах.

Хотя в данном случае это не страшно, вы отправляете полный запрос по сети,что не является предпочтительным.Кроме того, вы также можете защитить прямой доступ к самим таблицам, но предоставить доступ к SPROC, чтобы вы могли предоставить эту возможность перечисления определенным группам пользователей, не предоставляя им прямой доступ.

Я бы рекомендовал использовать оператор CASE вваша хранимая процедура, а не создание SQL.Это гарантирует, что вы поддерживаете только таблицы , о которых вам известно , и запрещает любое злоупотребление системой.

0 голосов
/ 05 января 2012

В качестве альтернативного подхода вы можете динамически устанавливать команду выбора Sqldatasource. Вам необходимо установить SelectCommandType = "Text" и использовать код, как показано ниже:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    switch (DropDownList1.SelectedValue.ToString())
    {
        case "TABLE1":
            SqlDataSource1.SelectCommand = "Select fieldName from TABLE1";
            break;
        case "TABLE2":
            SqlDataSource1.SelectCommand = "Select fieldName from TABLE2";
            break;
        default:           
            SqlDataSource1.SelectCommand = "Select fieldName from TABLE";
            break;
    }
}
...