官方文档: MySQL :: MySQL Connector/NET Developer Guide :: Preface and Legal Notices
MySQL Connector/NET 使用纯C#实现了ADO.NET接口。
安装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.Text
CommandText为MySql的命令文本CommandType=CommandType.TableDirect
CommandText为表名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"]);
}
}