параметризованные запросы против внедрения SQL

Я новичок в Asp.net, и я только начинаю работать с классами. Недавно я создал класс, который будет обрабатывать большинство моих запросов SQL для меня, чтобы мне не приходилось многократно создавать новые соединения для всех моих файлов.

Один из созданных мной методов принимает запрос SQL в качестве параметра и возвращает результат. Я знаю, что должен использовать параметризованные запросы, чтобы избежать SQL-инъекций. У меня вопрос, как я могу сделать это, когда я передаю запрос в виде строкового параметра?

Например, вот метод, который я буду вызывать:

public static DataTable SqlDataTable(string sql)
{
    using (SqlConnection conn = new SqlConnection(DatabaseConnectionString))
    {
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Connection.Open();
        DataTable TempTable = new DataTable();
        TempTable.Load(cmd.ExecuteReader());
        return TempTable;
    }
}

Итак, из другого файла я хотел бы использовать этот метод так:

DataTable dt = new DataTable();

dt = SqlComm.SqlDataTable("SELECT * FROM Users WHERE UserName='" + login.Text  + "' and Password='" + password.Text + "'");

if (dt.Rows.Count > 0)
{
   // do something if the query returns rows
}

Это работает, но все равно будет уязвимым для уколов, верно? Есть ли способ передать переменные в строку в качестве параметров? Я знаю, что могу сделать это, если я создаю новый объект SQLCommand для запроса и использую Parameters.AddWithValue, но я хотел, чтобы все мои команды SQL были в отдельном классе.

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

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