文件首頁
MySQL Connector/NET 開發人員指南
相關文件 下載本手冊

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