5.4 Подготовка заявок в Connector/NET
Предзаготовленные запросы могут обеспечить значительное повышение производительности при запросах, которые выполняются более одного раза. Предварительное выполнение быстрее, чем непосредственное выполнение для заявок, выполняемых более одного раза, в первую очередь потому, что запрос анализируется только один раз. В случае непосредственного выполнения запрос анализируется каждый раз при его выполнении. Кроме того, предварительное выполнение может сократить сетевой трафик, так как для каждого выполнения подготовленного запроса необходимо отправлять только данные для параметров.
Другим преимуществом подготовленных запросов является то, что при включенных подготовленных запросах на стороне сервера используется двоичный протокол, что делает передачу данных между клиентом и сервером более эффективной.
Для подготовки запроса выполните следующие шаги:
Создайте объект
MySqlCommandи установите свойствоCommandTextв свой запрос.После ввода вашей заявки вызовите метод
Prepareобъекта команды. При подготовке запроса добавьте параметры для каждого динамического элемента в запросе.Выполните запрос с помощью методов
ExecuteNonQuery(),ExecuteScalar()илиExecuteReader.
Для последующих выполнений вам нужно только изменить значения параметров и снова вызвать метод выполнения, нет необходимости устанавливать свойство CommandText или переопределять параметры.
Пример кода на C#
MySql.Data.MySqlClient.MySqlConnection conn;
MySql.Data.MySqlClient.MySqlCommand cmd;
conn = new MySql.Data.MySqlClient.MySqlConnection();
cmd = new MySql.Data.MySqlClient.MySqlCommand();
conn.ConnectionString = strConnection;
try
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO myTable VALUES(NULL, @number, @text)";
cmd.Prepare();
cmd.Parameters.AddWithValue("@number", 1);
cmd.Parameters.AddWithValue("@text", "One");
for (int i=1; i <= 1000; i++)
{
cmd.Parameters["@number"].Value = i;
cmd.Parameters["@text"].Value = "A string value";
cmd.ExecuteNonQuery();
}
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
MessageBox.Show("Error " + ex.Number + " has occurred: " + ex.Message,
"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Пример кода на Visual Basic
Dim conn As New MySqlConnection
Dim cmd As New MySqlCommand
conn.ConnectionString = strConnection
Try
conn.Open()
cmd.Connection = conn
cmd.CommandText = "INSERT INTO myTable VALUES(NULL, @number, @text)"
cmd.Prepare()
cmd.Parameters.AddWithValue("@number", 1)
cmd.Parameters.AddWithValue("@text", "One")
For i = 1 To 1000
cmd.Parameters("@number").Value = i
cmd.Parameters("@text").Value = "A string value"
cmd.ExecuteNonQuery()
Next
Catch ex As MySqlException
MessageBox.Show("Error " & ex.Number & " has occurred: " &
ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
© 2025 Oracle
Licensed under the GPLv2 License.