Spec-Zone .ru
спецификации, руководства, описания, API
|
С MySQL 4.1 возможно использовать подготовленные операторы с Соединителем/Сетью. Использование готовых операторов может обеспечить существенные улучшения производительности на запросах, которые выполняются не раз.
Подготовленное выполнение быстрее чем прямое выполнение для операторов, выполняемых не раз, прежде всего потому что запрос анализируется только однажды. В случае прямого выполнения запрос анализируется каждый раз, когда это выполняется. Подготовленное выполнение также может обеспечить сокращение сетевого трафика, потому что для каждого выполнения готового оператора, необходимо только отправить данные за параметрами.
Другое преимущество готовых операторов состоит в том, что это использует протокол двоичной синхронной передачи данных, который делает передачу данных между клиентом и сервером более эффективной.
Чтобы подготовить оператор, создайте объект команды и установите .CommandText
свойство к Вашему запросу.
После ввода Вашего оператора вызовите .Prepare
метод MySqlCommand
объект. После того, как оператор готовится, добавьте параметры для каждого из динамических элементов в
запросе.
После того, как Вы вводите свой запрос и вводите параметры, выполните оператор, используя .ExecuteNonQuery()
, .ExecuteScalar()
, или .ExecuteReader
методы.
Для последующего выполнения Вы должны только изменить значения параметров и вызвать выполнить метод снова,
нет никакой потребности установить .CommandText
свойство или пересматривает
параметры.
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
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);}