6.1.4 Работа с параметрами
В этой части учебника показано, как использовать параметры в вашем приложении MySQL Connector/NET.
Хотя возможно создать строку SQL-запроса непосредственно из пользовательского ввода, это не рекомендуется, так как это не предотвращает ввод ошибочной или вредоносной информации. Безопаснее использовать параметры, так как они будут обрабатываться только как данные поля. Например, представьте, что следующий запрос был составлен из пользовательского ввода:
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent = "+user_continent;
Если строка user_continent поступает из элемента управления текстовым полем, то потенциально нет контроля над вводимой пользователем строкой. Пользователь может ввести строку, которая приводит к ошибке во время выполнения, или, в худшем случае, наносит вред системе. При использовании параметров сделать это невозможно, так как параметр всегда обрабатывается только как параметр поля, а не как произвольный фрагмент SQL-кода.
Тот же запрос, записанный с использованием параметра для пользовательского ввода, выглядит следующим образом:
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent = @Continent";
Параметр предваряется символом '@', чтобы указать, что он должен обрабатываться как параметр.
Помимо указания позиции параметра в строке запроса, необходимо добавить параметр в объект MySqlCommand. Это проиллюстрировано следующим фрагментом кода:
cmd.Parameters.AddWithValue("@Continent", "North America");
В этом примере строка "Северная Америка" предоставляется как значение параметра статически, но в более практическом примере она будет поступать из элемента управления пользовательским вводом.
Дополнительный пример иллюстрирует весь процесс:
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial5
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent=@Continent";
MySqlCommand cmd = new MySqlCommand(sql, conn);
Console.WriteLine("Enter a continent e.g. 'North America', 'Europe': ");
string user_input = Console.ReadLine();
cmd.Parameters.AddWithValue("@Continent", user_input);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr["Name"]+" --- "+rdr["HeadOfState"]);
}
rdr.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
В этой части учебника вы увидели, как использовать параметры, чтобы сделать свой код более безопасным.
© 2025 Oracle
Licensed under the GPLv2 License.