но я слаб в отношении параметра размера. Я позволил плакатам скользить с `.AddWithValue, потому что я был так счастлив, что они по крайней мере использовали параметры.

даю веб-страницу для размещения базы данных.

Я хочу, чтобы на этой веб-странице была функция окна поиска, которая может обновлять GridView в Visual Studio 2017 для таблиц в SSMS 2014.

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

Веб-страница выглядит следующим образом:

На коду.

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

Вот текущий код события нажатия кнопки.

protected void btnSearch_Click(object sender, EventArgs e)
{
    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["CID1ConnectionString"].ConnectionString))
    {
        SqlDataAdapter searchAdapter = new SqlDataAdapter("Search", con);
        searchAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
        searchAdapter.SelectCommand.Parameters.AddWithValue("@TableName", TableSearchBox.Text.Trim());   // passing text in first text box in
        searchAdapter.SelectCommand.Parameters.AddWithValue("@columnSpecifier", ColumnSearchBox.Text.Trim());   // passing text in second text box in
        searchAdapter.SelectCommand.Parameters.AddWithValue("@searchString", searchStringBox.Text.Trim());   // passing text in third text box in

        DataTable temptable = new DataTable(); //table to have data that satisfies searchString copied to
        searchAdapter.Fill(temptable); //filling table from adapter

        tableDisplay.DataSource = temptable;
        //tableDisplay.Columns[0].Visible = false;
        tableDisplay.DataBind();//bind step
    }
}

Вот моя текущая хранимая процедура:

ALTER PROCEDURE dbo.Search 
    (@tableName NVARCHAR(50),
     @columnSpecifier NVARCHAR(50),
     @searchString NVARCHAR(50)) 
AS 
     EXEC('SELECT * FROM ' + @tableName + ' WHERE ' + @columnSpecifier + ' LIKE '' + @searchString + %''')

Предполагается, что для выполнения запроса, подобного этому, конечный пользователь заполнил первое текстовое поле «Basic_Info», второе текстовое поле «Имя» и последнее текстовое поле «М».

SELECT Name 
FROM Basic_Info 
WHERE Name LIKE 'M%'

Похоже, я использую динамическое имя таблицы вFROM предложение мне нужно использовать динамический SQL. Я поместил свой запрос вEXEC заблокировать и окружить мой синтаксис SQL одинарными кавычками ('). Эти одинарные кавычки, кажется, делают с использованием оператора% в моемLIKE пункт невозможно, но, может быть, я просто не вижу этого.

Есть ли способ достижения этой функциональности? Должен ли я сделать резервную копию и сделать это по-другому? Я читал, что это может привести к инъекции SQL, что звучит как что-то, чего следует избегать. Любые советы приветствуются даже в отношении этого поста и его формата. Это мой первый вопрос по переполнению стека!

РЕДАКТИРОВАТЬ: Оказывается, хранимая процедура и использование параметров не требуется. Мое последнее событие нажатия кнопки выглядит следующим образом и просто получает текстовое значение для заполнения запроса.

        protected void btnSearch_Click(object sender, EventArgs e)
    {
            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["CID1ConnectionString"].ConnectionString))
            {
            DataTable temptable = new DataTable(); //table to have data that satisfies searchString copied to
            SqlDataAdapter searchAdapter = new SqlDataAdapter("SELECT * FROM " + TableSearchBox.Text.Trim() + " WHERE " + ColumnSearchBox.Text.Trim() + " LIKE '"  + searchStringBox.Text.Trim() + "%'", con);
            searchAdapter.Fill(temptable); //filling table from adapter
            tableDisplay.DataSource = temptable;
            tableDisplay.DataBind();//bind step
            }
    }

Ответы на вопрос(1)

Ваш ответ на вопрос