C#中使用MySql.Data操作数据库
  JWGppPCsR1pT 2023年11月02日 182 0

官方文档: MySQL :: MySQL Connector/NET Developer Guide :: Preface and Legal Notices

MySQL Connector/NET 使用纯C#实现了ADO.NET接口。

安装MySql.Data

C#中使用MySql.Data操作数据库_连接字符串

使用数据库的一般步骤

  • 连接数据库
  • 执行SQL语句
  • 使用查询结果
  • 关闭数据库连接

数据库连接器

ADO.NET中使用连接器连接数据,MySql.Data中对应的类为:MySqlCommand.

连接字符串

连接器使用连接字符串配置,以下是一个简单的连接字符串:

"server=server-pc;uid=root;pwd=luan225;database=zuoye";
  • 连接字符串使用键值对进行配置
  • 每个配置用;分隔

关于配置项的含义,请参考:MySQL :: MySQL Connector/NET Developer Guide :: 4.5 Connector/NET Connection Options Reference

连接示例:

 static readonly string mYconnectionString = "server=server-pc;uid=root;pwd=luan225;database=zuoye";
static void Main(string[] args)
{
    try
    {
        MySqlConnection conn = new MySqlConnection(mYconnectionString);
        // conn.ConnectionString = mYconnectionString;
        conn.Open();
        conn.Close();
    }
    catch (MySqlException ex)
    {
        Console.WriteLine(ex.Message);
    }
}

MySqlConnectionStringBuilder

通过将连接选项公开为属性来帮助创建连接字符串

 static void Main(string[] args)
 {
     try
     {
         MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder()
         {
             Server = "server-pc",
             Port = 3306,
             UserID = "root",
             Password = "luan225",
             Database = "zuoye"
         };

         MySqlConnection conn = 
           new MySqlConnection(builder.ConnectionString);
         conn.Open();

    
         conn.Close();
     }
     catch (MySqlException ex)
     {
         Console.WriteLine(ex.Message);
     }
 }

使用MySqlCommand

MySqlCommand用于执行MySql查询或语句。

CommandText 和 CommandType 属性

根据CommandType属性的取值,CommandText有不同的解释

  • CommandType=CommandType.TextCommandText为MySql的命令文本
  • CommandType=CommandType.TableDirectCommandText为表名
  • CommandType=CommandType.StoredProcedure CommandText为存储过程的名称
private static void CommandTableDirect(MySqlConnection conn)
{
    MySqlCommand cmd = new MySqlCommand();
    cmd.CommandText = "course"; // table name
    cmd.Connection = conn;
    cmd.CommandType = CommandType.TableDirect;

    MySqlDataReader reader = cmd.ExecuteReader();
    Console.WriteLine(reader.FieldCount);
    List<String> FieldNames = new List<string>();
    for (int i = 0; i < reader.FieldCount; i++)
    {
        FieldNames.Add(reader.GetName(i));
        Console.Write(reader.GetName(i) + "\t  ");
    }
    Console.WriteLine();

    while (reader.Read())
    {
        foreach (var name in FieldNames)
        {
            Console.Write($"{reader[name]} \t");
        }
        Console.WriteLine();
    }
}
  • 结果与SELECT * FROM course一样
 private static void CommandText(MySqlConnection conn)
 {
     MySqlCommand cmd = conn.CreateCommand();
     cmd.CommandText = "SELECT Sno,Sname FROM student where Ssex=\"男\"";
     cmd.CommandType = CommandType.Text;
     MySqlDataReader reader = cmd.ExecuteReader();
     while (reader.Read())
     {
         Console.WriteLine("{0}  -- {1}", reader["Sno"], reader["Sname"]);
     }
 }
  • CommandText就是普通的SQL语句

Parameters属性

虽然可以直接从用户输入构建SQL查询字符串,但不建议这样做,因为它不能防止输入错误或恶意信息。使用Parameters更安全,因为它们将仅作为字段数据处理。

 private static void CommandWithParameters(MySqlConnection conn)
 {
     MySqlCommand cmd = conn.CreateCommand();
     cmd.CommandText = "SELECT Sno,Sname FROM student WHERE Ssex=@sex";
     cmd.CommandType = CommandType.Text;
     cmd.Parameters.Clear();
     // 准备数据
     cmd.Parameters.AddWithValue("sex", "");
     cmd.Parameters["@sex"].Value = "男";
     MySqlDataReader reader = cmd.ExecuteReader();
     while (reader.Read())
     {
         Console.WriteLine("{0} -- {1}", reader["Sno"], reader["Sname"]);
     }
 }

处理日期时间类型

MySQL :: MySQL Connector/NET Developer Guide :: 5.10 Handling Date and Time Information in Connector/NET

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
JWGppPCsR1pT