准备工作
在Visual Studio中新建一个C#的控制台应用程序。
确保后台已经启用了MySQL57服务。
在MySQL的安装路径下找到DLL,默认位置是 C:Program Files (x86)MySQLConnector.NET 6.9Assembliesv4.5MySql.Data.dll 。
更多写代码连接MySQL的方法(通过MySQLConnector连接器),参考文档 C:Program Files (x86)MySQLConnector.NET 6.9DocumentationConnectorNET.chm 。在文档的Users Guide-Programming中有代码案例。
把MySql.Data.dll引入项目中。v4.5表示.NetFramework框架的版本号,一定要保证使用的DLL与项目的.NetFramework版本一致,否则运行时报错找不到DLL,报错如下:
1>F:LearningCSharpConnectMySQLCSharpConnectMySQLProgram.cs(1,7,1,12): error CS0246: The type or namespace name 'MySql' could not be found (are you missing a using directive or an assembly reference?)
测试增删改查
using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CSharpConnectMySQL { class Program { static void Main(string[] args) { // 服务器地址;端口号;数据库;用户名;密码 string connectStr = "server=127.0.0.1;port=3306;database=mygamedb;user=root;password=root"; // 用户名和密码在MySQL定义的 // 创建连接 MySqlConnection conn = new MySqlConnection(connectStr); try { // 打开连接 conn.Open(); Console.WriteLine("已经建立连接"); //Query(conn); // 测试查询 //Insert(conn); // 测试插入 //Update(conn); // 测试更新 //Delete(conn); // 测试删除 } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { // 关闭连接 conn.Close(); Console.WriteLine("数据库已关闭"); } Console.ReadKey(); } /// <summary> /// 查询 /// </summary> /// <param name="conn"></param> private static void Query(MySqlConnection conn) { // 创建命令 string sql = "select * from users"; MySqlCommand cmd = new MySqlCommand(sql, conn); // 读取数据 MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) // true表示能读取该行数据 {
// 方式一:访问数组
Console.WriteLine(reader[0].ToString() + reader[1].ToString()); // reader[0]是读出来的第一列属性
// 方式二:根据列数
Console.WriteLine(reader.GetInt32(0));
// 方式三:根据列名
Console.WriteLine(reader.GetInt32("user_id")); } } /// <summary> /// 插入,增加数据 /// </summary> /// <param name="conn"></param> private static void Insert(MySqlConnection conn) { // 创建命令 string sql = "insert into user(user_name, user_pwd) values('asdAa','2345')"; MySqlCommand cmd = new MySqlCommand(sql, conn); // 添加一条记录 int result = cmd.ExecuteNonQuery(); Console.WriteLine("数据库中受影响的行数 = " + result); } /// <summary> /// 更新,改数据 /// </summary> /// <param name="conn"></param> private static void Update(MySqlConnection conn) { // 创建命令 string sql = "update user set user_name = 'newName', user_pwd = '66777' where user_id = '3'"; MySqlCommand cmd = new MySqlCommand(sql, conn); // 更新记录 int result = cmd.ExecuteNonQuery(); Console.WriteLine("数据库中受影响的行数 = " + result); } /// <summary> /// 删除数据 /// </summary> /// <param name="conn"></param> private static void Delete(MySqlConnection conn) { // 创建命令 string sql = "delete from user where user_id = '4'"; MySqlCommand cmd = new MySqlCommand(sql, conn); // 删除记录 int result = cmd.ExecuteNonQuery(); Console.WriteLine("数据库中受影响的行数 = " + result); } } }
传参拼接SQL语句
/// <summary> /// 验证用户名和密码 /// </summary> /// <param name="conn"></param> /// <param name="userName"></param> /// <param name="password"></param> /// <returns></returns> private static bool Verify(MySqlConnection conn, string userName, string password) { // 方式一:组拼sql //string sql = "select * from user where user_name = '" + userName + "' and user_pwd = '" + password + "'"; //MySqlCommand cmd = new MySqlCommand(sql, conn); // 方式二:参数标记 string sql = "select * from user where user_name = @p1 and user_pwd = @p2"; MySqlCommand cmd = new MySqlCommand(sql, conn); cmd.Parameters.AddWithValue("p1", userName); // 这里会根据输入的类型,自动判断要不要加单引号'' cmd.Parameters.AddWithValue("p2", password); MySqlDataReader reader = cmd.ExecuteReader(); if (reader.Read()) // 要么查出一条数据,要么0条。 { return true; } return false; }