C#操作Mysql(VS2015+Win10)
Mysql是常用的关系型数据库,Windows下Mysql的安装方法参考:Windows下MYSQL的安装!(添加my.ini文件后,要重启mysql服务才能使my.ini生效)
Windows下Mysql的终端使用方法参考:Mysql数据库命令大全!
C#操作Mysql示例
C#对数据库的操作主要依赖于动态链接库MySql.Data.dll,我们先在程序包管理器控制台使用NuGet下载
> Install-Package MySql.Data
指定版本下载的方法为:
> Install-Package MySql.Data -Version 6.7.9
也可按照如下方式安装:
第一步,右键项目,点击管理NuGet程序包
第二步,在搜索框输入Mysql.Data进行搜索,找到后点击安装,可手动选择版本。
第三步,安装过程中需点击确定,我接受等内容。
第四步,安装成功后可在项目引用中看到Mysql.Data
(推荐装低版本,高版本可能会安装失败)
第五步,程序中添加使用Mysql命名空间
using MySql.Data;
using MySql.Data.MySqlClient;
1.创建删除数据库
1.创建数据库
string connStr = "server=127.0.0.1;user=root;password=rootmysql;";
conn = new MySqlConnection(connStr);
conn.Open();
string sql = "Create database testdb";
MySqlCommand cmd = new MySqlCommand(sql, conn);
int s = cmd.ExecuteNonQuery();
conn.Close();
2.显示数据库
string connStr = "server=127.0.0.1;user=root;password=rootmysql;";
conn = new MySqlConnection(connStr);
conn.Open();
string sql = "show databases;";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader reader = cmd.ExecuteReader();
while(reader.Read()) {
Console.WriteLine(reader.GetString("DataBase"));
}
conn.Close();
3.删除数据库
string connStr = "server=127.0.0.1;user=root;password=rootmysql;";
conn = new MySqlConnection(connStr);
conn.Open();
string sql = "drop database testdb";
MySqlCommand cmd = new MySqlCommand(sql, conn);
int s = cmd.ExecuteNonQuery();
conn.Close();
2.连接Mysql数据库
string connStr = "server=127.0.0.1;user=root;password=rootmysql; database=wpfbasedb;";
MySqlConnection conn = new MySqlConnection(connStr);
try {conn.Open();showspace.Text="连接成功";}
catch {showspace.Text="连接失败";}
注意: 如果指定的数据库不存在,会连接失败,但当数据库名为空字符串时,会连接成功(类似终端未执行use database;)。
3.创建删除数据表
1.创建数据表
string connStr = "server=127.0.0.1;user=root;password=rootmysql;database=wpfbasedb;";
conn = new MySqlConnection(connStr);
conn.Open();
string sql = "CREATE TABLE `testtable` ("
+ "`UserID` int unsigned NOT NULL AUTO_INCREMENT,"
+ "`UserName` varchar(20) NOT NULL,"
+ "`UserAccount` varchar(10) NOT NULL,"
+ "`UserPasswd` varchar(20) NOT NULL,"
+ "`UserPhone` varchar(11) DEFAULT NULL,"
+ "`UserEmail` varchar(40) DEFAULT NULL,"
+ "`UserSex` tinyint(1) NOT NULL,"
+ "PRIMARY KEY (`UserID`)"
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8;";
MySqlCommand cmd = new MySqlCommand(sql, conn);
int s = cmd.ExecuteNonQuery();
conn.Close();
2.删除数据表
string connStr = "server=127.0.0.1;user=root;password=rootmysql;database=wpfbasedb;";
conn = new MySqlConnection(connStr);
conn.Open();
string sql = "drop table testtable";
MySqlCommand cmd = new MySqlCommand(sql, conn);
int s = cmd.ExecuteNonQuery();
conn.Close();
4.从数据表中查询数据
1.查询多行数据
conn.Open();
string sql = "select * from usertable";
MySqlCommand cmd = new MySqlCommand(sql, conn);
// 查询数据表
MySqlDataReader reader = cmd.ExecuteReader();
Console.WriteLine("UserID\t姓名\t帐号\t密码\t电话\t邮箱\t性别");
while(reader.Read()) {
Console.Write(reader.GetInt32("UserID")+"\t");
Console.Write(reader.GetString("UserName")+"\t");
Console.Write(reader.GetInt32("UserAccount")+"\t");
Console.Write(reader.GetString("UserPasswd")+"\t");
if (reader.IsDBNull(4))
Console.Write("NULL\t");
else
Console.Write(reader.GetInt32("UserPhone")+"\t");
if (reader.IsDBNull(5))
Console.Write("NULL\t");
else
Console.Write(reader.GetString("UserEmail")+"\t");
if (reader.GetInt32("UserSex") == 1)
Console.Write("男\n");
else
Console.Write("女\n");
}
conn.Close();
2.查询单个数据
conn.Open();
sql = "select UserName from usertable where UserID=1";
cmd = new MySqlCommand(sql, conn);
string name = cmd.ExecuteScalar().ToString();
Console.WriteLine(name);
conn.Close();
注意:每次执行sql命令语句前,需要使用conn.Open()开启数据库连接,每次执行后需要使用conn.Close()关闭数据库连接。否则,在下一次执行sql命令时可能出现下面三种异常情况:
(1)上一次执行完使用Close关闭,但本次执行前未使用Open开启。报未开启连接异常
(2)上一次执行完未使用Close关闭,本次执行前未使用Open开启。报连接处于上一次命令状态异常
(3)上一次执行完未使用Close关闭,本次执行前使用Open开启。报连接已开启,不能再次开启异常
5.对数据表产生影响的操作
conn.Open();
sql = "insert into usertable (UserName, UserAccount, UserPasswd, "
+ "UserPhone, UserEmail, UserSex) values ('kaer', '1245228904', "
+"'kaer3360', '13166243360', '1245228904@qq.com', 0)";
cmd = new MySqlCommand(sql, conn);
int s = cmd.ExecuteNonQuery();
if (s == 0)
Console.WriteLine("false");
else
Console.WriteLine("success");
conn.Close();