Spec-Zone.ru › MySQL Connectors 1.0

5.4 Подготовка заявок в Connector/NET

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

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

Для подготовки запроса выполните следующие шаги:

  1. Создайте объект MySqlCommand и установите свойство CommandText в свой запрос.

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

  3. Выполните запрос с помощью методов 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.
https://docs.oracle.com/cd/E17952_01/connector-net-en/connector-net-programming-prepared.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API