MySQL 是一个领先的开源数据库管理系统。它是一个多用户、多线程的数据库管理系统。MySQL 在网络上特别流行。MySQL 数据库可在大多数重要的操作系统平台上使用。它可在 BSD Unix、Linux、Windows 或 Mac OS 上运行。MySQL 有两个版本:MySQL 服务器系统和 MySQL 嵌入式系统。
ADO.NET 是统一访问关系数据库、XML 文件和其他应用程序数据的规范。MySql.Data是 MySQL 数据库的 ADO.NET 规范的实现。它是一个用 C# 语言编写的驱动程序,适用于所有 .NET 语言。
我们将该包包含到我们的.NET Core 项目中。
MySqlConnection
, MySqlCommand
, MySqlDataReader
, DataSet
, MySqlDataProvider
是 .NET 数据提供程序模型的核心元素。
对象DataSet
用于离线处理大量数据。它是一种断开连接的数据表示,可以保存来自各种不同来源的数据。MySqlDataReader
和都DataSet
用于处理数据;它们在不同情况下使用。如果我们只需要读取查询结果,那么MySqlDataReader
是更好的选择。如果我们需要更广泛的数据处理,或者我们想将 Winforms 控件绑定到数据库表,那么DataSet
是首选。
cs
using MySql.Data.MySqlClient;
string cs = @"server=localhost;userid=dbuser;password=s$cret;database=testdb";
using var con = new MySqlConnection(cs);
con.Open();
Console.WriteLine($"MySQL version : {con.ServerVersion}");
我们导入 MySQL 数据提供程序的元素。
cs
using MySql.Data.MySqlClient;
这是连接字符串。数据提供程序使用它来建立与数据库的连接。我们指定主机名、用户名、密码和数据库名称。
cs
string cs = @"server=localhost;userid=dbuser;password=s$cret;database=testdb";
创建一个MySQLConnection
对象。此对象用于打开与数据库的连接。using
当变量超出范围时,该语句将释放数据库连接资源。
cs
using var con = new MySqlConnection(cs);
此行打开数据库连接。
cs
con.Open();
ServerVersion
这里我们使用连接对象的属性打印 MySQL 的版本。
cs
Console.WriteLine($"MySQL version : {con.ServerVersion}");
C# MySQL SELECT 语句
cs
using MySql.Data.MySqlClient;
string cs = @"server=localhost;userid=dbuser;password=s$cret;database=mydb";
using var con = new MySqlConnection(cs);
con.Open();
var stm = "SELECT VERSION()";
var cmd = new MySqlCommand(stm, con);
var version = cmd.ExecuteScalar().ToString();
Console.WriteLine($"MySQL version: {version}");
C# MySQL 创建表
cs
using MySql.Data.MySqlClient;
string cs = @"server=localhost;userid=dbuser;password=s$cret;database=testdb";
using var con = new MySqlConnection(cs);
con.Open();
using var cmd = new MySqlCommand();
cmd.Connection = con;
cmd.CommandText = "DROP TABLE IF EXISTS cars";
cmd.ExecuteNonQuery();
cmd.CommandText = @"CREATE TABLE cars(id INTEGER PRIMARY KEY AUTO_INCREMENT,
name TEXT, price INT)";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Audi',52642)";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Mercedes',57127)";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Skoda',9000)";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Volvo',29000)";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Bentley',350000)";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Citroen',21000)";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Hummer',41400)";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO cars(name, price) VALUES('Volkswagen',21600)";
cmd.ExecuteNonQuery();
Console.WriteLine("Table cars created");
C# MySQL 准备好的语句
cs
using MySql.Data.MySqlClient;
string cs = @"server=localhost;userid=dbuser;password=s$cret;database=testdb";
using var con = new MySqlConnection(cs);
con.Open();
var sql = "INSERT INTO cars(name, price) VALUES(@name, @price)";
using var cmd = new MySqlCommand(sql, con);
cmd.Parameters.AddWithValue("@name", "BMW");
cmd.Parameters.AddWithValue("@price", 36600);
cmd.Prepare();
cmd.ExecuteNonQuery();
Console.WriteLine("row inserted");
C# MySqlDataReader
cs
using MySql.Data.MySqlClient;
string cs = @"server=localhost;userid=dbuser;password=s$cret;database=testdb";
using var con = new MySqlConnection(cs);
con.Open();
string sql = "SELECT * FROM cars";
using var cmd = new MySqlCommand(sql, con);
using MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine("{0} {1} {2}", rdr.GetInt32(0), rdr.GetString(1),
rdr.GetInt32(2));
}
C# MySQL 列标题
在下面的示例中,我们使用数据库表中的数据打印列标题。
cs
using MySql.Data.MySqlClient;
string cs = @"server=localhost;userid=dbuser;password=s$cret;database=testdb";
using var con = new MySqlConnection(cs);
con.Open();
string sql = "SELECT * FROM cars";
using var cmd = new MySqlCommand(sql, con);
using MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine("{0} {1} {2}", rdr.GetInt32(0), rdr.GetString(1),
rdr.GetInt32(2));
}
(结束)