kmllev Ответов: 4

Как включить переменную в SQL-запрос?


Я создаю приложение в VS 2015, создал базу данных с помощью SQL Server 2016 Express.

Чтобы сократить код в C#, я создал представления в SQL Server 2016, так что я могу просто вызвать их в своем коде C#, но некоторые запросы должны будут давать результаты, которые зависят от ввода пользователя, например, какое имя они ввели, номер и т. д.

Как например:

string name = txtName.Text.ToString();

command.CommandText = "SELECT * FROM table1 WHERE name = '"+name+"'";


Как мне это сделать в представлении? Значит,мне не придется вводить весь запрос в свой код C#?
Таким образом, я могу назвать запрос следующим образом, "LoadNames" например, а потом просто сделайте это:

command.CommandText = "SELECT * FROM LoadNamesView"


Что я уже пробовал:

Я видел:

DECLARE @theDate DATETIME
SET @theDate = '2010-01-01'


Но я не уверен, что это правильный ответ?

Philippe Mori

Ваш код подвержен SQL-инъекции. Никогда не пиши такой код.

4 Ответов

Рейтинг:
2

ljdhameliya

string commandText = "select * from Students where studentid=@studentid"
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@studentid", 101);


Рейтинг:
1

Patrice T

Похоже, вы ищете параметры SQL:
SQL-инъекция[^]
Преимущество параметров заключается в том, что они позволяют избежать проблемы SQL-инъекции.
В этой команде

command.CommandText = "SELECT * FROM table1 WHERE name = '"+name+"'";

если переменная C name это вход пользователя, он открывает дверь для инъекции.


Рейтинг:
1

Maciej Los

Я бы предложил использовать хранимые процедуры:
Как выполнить хранимую процедуру, возвращающую строки[^]
Как выполнить запрос с помощью хранимой процедуры с параметрами In и Out[^]
Как использовать хранимые процедуры, принимающие параметры[^]

Преимущества:
1. используется только имя хранимой процедуры
2. хранимая процедура предоставляет способ передачи параметров


Рейтинг:
1

Bhavikkumar Chaudhari

Если вы с "взглядами", то не беспокойтесь.
Ниже приведен способ обработки нескольких параметров с помощью SQL-представлений.

Создать переменную, которая называется "Где" внутри передавать все параметры SQL с помощью сцепления.

Пример: если у вас есть таблица EmployeeMst и вы создали представление под названием "View_Select_All_Employees", то вызовите это представление, как показано ниже.

string Where = " Where 1=1 ";

if(txtFName.Text.Trim() != Null)
{
   Where += " And EmpFName ='"+ txtFName.Text.Trim() +"'";
}
if(txtLName.Text.Trim() != Null)
{
   Where += " And EmpLName ='"+ txtLName.Text.Trim() +"'";
}


string commandText = "select * from View_Select_All_Employees " + Where;
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@studentid", 101);



Надеюсь, это вам поможет..!!! :)