文档首页
MySQL Connector/NET 开发人员指南
相关文档 下载本手册
PDF (US Ltr) - 1.3Mb
PDF (A4) - 1.3Mb


MySQL Connector/NET 开发人员指南  /  Connector/NET 编程  /  在 Connector/NET 中准备语句

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