6.1.2 MySqlCommand 对象

与 MySQL 数据库建立连接后,下一步可以执行数据库操作。这个任务可以通过使用 MySqlCommand对象来实现。

创建后,您可以调用三个主要的方法:

  • ExecuteReader查询数据库。结果通常在一个 MySqlDataReader对象中返回,该对象由 ExecuteReader.

  • ExecuteNonQuery插入、更新和删除数据。

  • ExecuteScalar返回单个值。

创建对象后MySqlCommand,您可以在其上调用前面的方法之一来执行数据库操作,例如执行查询。结果通常返回到一个MySqlDataReader对象中,然后进行处理。例如,结果可能会显示为以下代码示例所示。

Press CTRL+C to copy
using System; using System.Data; using MySql.Data; using MySql.Data.MySqlClient; public class Tutorial2 { public static void Main() { string connStr = "server=localhost;user=root;database=world;port=3306;password=******"; MySqlConnection conn = new MySqlConnection(connStr); try { Console.WriteLine("Connecting to MySQL..."); conn.Open(); string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent='Oceania'"; MySqlCommand cmd = new MySqlCommand(sql, conn); MySqlDataReader rdr = cmd.ExecuteReader(); while (rdr.Read()) { Console.WriteLine(rdr[0]+" -- "+rdr[1]); } rdr.Close(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } conn.Close(); Console.WriteLine("Done."); } }

创建并打开连接后,代码会创建一个MySqlCommand对象。然后将要执行的 SQL 查询传递给 MySqlCommand构造函数。然后使用该 ExecuteReader方法生成 MySqlReader对象。该 MySqlReader对象包含在该对象上执行的 SQL 生成的结果 MySqlCommand。当在MySqlReader对象中获得结果时,可以处理结果。while在这种情况下,信息是通过循环打印出来的。最后, MySqlReader通过调用该Close方法来处理该对象。

下一个示例显示如何使用该 ExecuteNonQuery方法。

执行ExecuteNonQuery 方法调用的过程更简单,因为不需要创建对象来存储结果。这是因为ExecuteNonQuery 仅用于插入、更新和删除数据。以下示例说明了对 Country表的简单更新:

Press CTRL+C to copy
using System; using System.Data; using MySql.Data; using MySql.Data.MySqlClient; public class Tutorial3 { public static void Main() { string connStr = "server=localhost;user=root;database=world;port=3306;password=******"; MySqlConnection conn = new MySqlConnection(connStr); try { Console.WriteLine("Connecting to MySQL..."); conn.Open(); string sql = "INSERT INTO Country (Name, HeadOfState, Continent) VALUES ('Disneyland','Mickey Mouse', 'North America')"; MySqlCommand cmd = new MySqlCommand(sql, conn); cmd.ExecuteNonQuery(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } conn.Close(); Console.WriteLine("Done."); } }

构造查询,MySqlCommand 创建对象并ExecuteNonQuery调用MySqlCommand对象上的方法。您可以使用mysql访问您的 MySQL 数据库并验证更新是否正确执行。

最后,您可以使用该ExecuteScalar方法返回单个值。同样,这很简单,因为 MySqlDataReader不需要对象来存储结果,而是使用变量。以下代码说明了如何使用该ExecuteScalar 方法:

Press CTRL+C to copy
using System; using System.Data; using MySql.Data; using MySql.Data.MySqlClient; public class Tutorial4 { public static void Main() { string connStr = "server=localhost;user=root;database=world;port=3306;password=******"; MySqlConnection conn = new MySqlConnection(connStr); try { Console.WriteLine("Connecting to MySQL..."); conn.Open(); string sql = "SELECT COUNT(*) FROM Country"; MySqlCommand cmd = new MySqlCommand(sql, conn); object result = cmd.ExecuteScalar(); if (result != null) { int r = Convert.ToInt32(result); Console.WriteLine("Number of countries in the world database is: " + r); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } conn.Close(); Console.WriteLine("Done."); } }

此示例使用一个简单的查询来计算 Country表中的行数。通过调用对象获得ExecuteScalar结果 MySqlCommand