4.6.1.2 MySqlCommand 对象

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

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

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

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

下一个示例显示如何使用该 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 创建对象并ExecuteNonQuery调用MySqlCommand对象上的方法。您可以使用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表中的行数。通过调用对象获得ExecuteScalar结果 MySqlCommand