Spec-Zone .ru
спецификации, руководства, описания, API

21.2.5.8. Используя Соединитель/Сеть с Готовыми Операторами

С MySQL 4.1 возможно использовать подготовленные операторы с Соединителем/Сетью. Использование готовых операторов может обеспечить существенные улучшения производительности на запросах, которые выполняются не раз.

Подготовленное выполнение быстрее чем прямое выполнение для операторов, выполняемых не раз, прежде всего потому что запрос анализируется только однажды. В случае прямого выполнения запрос анализируется каждый раз, когда это выполняется. Подготовленное выполнение также может обеспечить сокращение сетевого трафика, потому что для каждого выполнения готового оператора, необходимо только отправить данные за параметрами.

Другое преимущество готовых операторов состоит в том, что это использует протокол двоичной синхронной передачи данных, который делает передачу данных между клиентом и сервером более эффективной.

21.2.5.8.1. Подготовка Операторов в Соединителе/Сети

Чтобы подготовить оператор, создайте объект команды и установите .CommandText свойство к Вашему запросу.

После ввода Вашего оператора вызовите .Prepare метод MySqlCommand объект. После того, как оператор готовится, добавьте параметры для каждого из динамических элементов в запросе.

После того, как Вы вводите свой запрос и вводите параметры, выполните оператор, используя .ExecuteNonQuery(), .ExecuteScalar(), или .ExecuteReader методы.

Для последующего выполнения Вы должны только изменить значения параметров и вызвать выполнить метод снова, нет никакой потребности установить .CommandText свойство или пересматривает параметры.

Пример Visual Basic
Dim conn As New MySqlConnectionDim cmd As New MySqlCommandconn.ConnectionString = strConnectionTry   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()     NextCatch ex As MySqlException    MessageBox.Show("Error " & ex.Number & " has occurred: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)End Try
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);}