но я слаб в отношении параметра размера. Я позволил плакатам скользить с `.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
}
}