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


6.1.2 MySqlCommand 对象

在与 MySQL 数据库建立连接后,下一步是执行数据库操作。可以通过使用 MySqlCommand 对象来完成此任务。

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

  • ExecuteReader 查询数据库。结果通常返回到由 ExecuteReader 创建的 MySqlDataReader 对象中。

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

  • ExecuteScalar 返回单个值。

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

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 对象包含由在 MySqlCommand 对象上执行的 SQL 生成的结果。在 MySqlReader 对象中获得结果后,可以处理这些结果。在这种情况下,信息将通过 while 循环打印出来。最后,通过调用 Close 方法来释放 MySqlReader 对象。

以下示例演示了如何使用 ExecuteNonQuery 方法。

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

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 对象,并在 MySqlCommand 对象上调用 ExecuteNonQuery 方法。您可以使用 mysql 访问您的 MySQL 数据库,并验证更新是否已正确执行。

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

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 表中的行数。通过在 MySqlCommand 对象上调用 ExecuteScalar 来获得结果。