MySQL 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