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