Как в C# безопасно предать параметр SQL функции?
Вот код, которым у меня выходит получать таблицу
public void GetEmployeeByLogin(string login)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
using (SqlCommand comm = new SqlCommand("SELECT * FROM dbo.GetEmployeeByLogin('" + login + "')", conn))
{
comm.CommandType = System.Data.CommandType.Text;
conn.Open();
using (SqlDataReader reader = comm.ExecuteReader())
{
while (reader.Read())
{
// Работа с данными
}
}
}
}
}
Но строка using (SqlCommand comm = new SqlCommand("SELECT * FROM dbo.GetEmployeeByLogin('" + login + "')", conn)) небезопасна для SQL-инъекций.
Каким образом можно получить возвращаемую из функции таблицу безопасно?
Ответы (1 шт):
Автор решения: S.H.
→ Ссылка
Можно попробовать так, без склейки строк (что и делает возможной SQL injection):
public void GetEmployeeByLogin(string login)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using (SqlCommand comm = new SqlCommand("SELECT * FROM dbo.GetEmployeeByLogin(@login)", conn))
{
comm.Parameters.AddWithValue("@login", login);
comm.CommandType = System.Data.CommandType.Text;
using (SqlDataReader reader = comm.ExecuteReader())
{
while (reader.Read())
{
// Работа с данными
}
}
}
}
}
Есть определенные возражения против использования AddWithValue(), но так явно будет лучше, чем было.