之前跟着教材实现了 Microsoft SQL Server的连接和管理,现在尝试连接MySQL,为了后面忘记,在这记录一下,因为刚开始学习,写的时候感觉怪怪的,希望看到的人能提一些意见,先提前感谢
提前准备
创建数据库
按“win+R"键,打开
确定后输入:mysql -u root -p,然后输入密码
mysql -u root -p
1 查询所有数据库
mysql> show databases;
2 创建数据库
mysql> create database studentmanagersystem
-> default character set utf8
-> ;
Query OK, 1 row affected (0.00 sec)
3 选择数据库
mysql> use studentmanagersystem ;
Database changed
1 查看所有表
mysql> show tables;
2 创建表
mysql> create table tb_Login(
-> ID int,
-> Name varchar(20),
-> Pass int
-> );
Query OK, 0 rows affected (0.01 sec)
3 查看表结构
mysql> desc tb_Login;
3 rows in set (0.01 sec)
4 增加数据
-- 插入所有字段。一定依次按顺序插入
INSERT INTO tb_Login VALUES(1,'中',12);
其他操作的SQL语言,直接百度
由于此方法操作麻烦,后面创建数据库和表直接用的软件,很方便
1.引用MySql.Data.dll
项目-->添加引用--->浏览--->将对应版本的MySql.Data.dll添加进来
查看MySql.Data.dll所在路径:
打开MySQL Installer软件
如果没有的话,点击右边Add直接下载对应版本。
添加进来后,点击确定,然后
using MySql.Data.MySqlClient;
2.设计winform项目界面
数据库和数据表中的数据是已有的,所以就直接把数据库名字和使用的数据表名字写到textbox中了。
3.代码
3.1连接数据库并加载数据、断开连接
"连接数据库并加载数据”的代码
MySqlConnection conn;//建立一个数据库连接对象
DataSet ds;//建立一个dataset
MySqlDataAdapter sda;//建立一个数据适配器对象
MySqlCommand cmd;//建立命令发送
/// <summary>
/// 连接数据库并加载数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private bool connState = false;
private void button5_Click(object sender, EventArgs e)
{
try
{
if (connState == false)
{
//连接
string Constr = "server=127.0.0.1;port=3306;user=root;password=*******;database=jiaoshi4";
conn = new MySqlConnection(Constr);
conn.Open();
if (conn.State == ConnectionState.Open)
{
connState = true;
button5.Text = "断开连接";
//加载数据
MySqlCommand sqlcmd = new MySqlCommand("select * from " + tb_tablename.Text.Trim(), conn);
//MySqlDataAdapter sda = new MySqlDataAdapter();
sda = new MySqlDataAdapter();
sda.SelectCommand = sqlcmd;
ds = new DataSet();
sda.Fill(ds, "cs");
dataGridView4.DataSource = ds.Tables[0];
dataGridView4.Columns[0].ReadOnly = true;
}
}
else
{
string Constr = "server=127.0.0.1;port=3306;user=root;password=******;database=jiaoshi4";
conn = new MySqlConnection(Constr);
conn.Close();
conn.Dispose();
if (conn.State == ConnectionState.Closed)
{
connState = false;
//清空数据和数据源
DataTable myData = (DataTable)dataGridView4.DataSource;
myData.Clear();
button5.Text = "连接数据库并加载数据";
}
}
}
catch (Exception ex)
{
MessageBox.Show("异常!" + ex);
}
}
其中,jiaoshi4是数据库名字,student是数据表的名字
结果:
3.2 查询数据
实现想法:根据数据表的列名,查询是否有该数据,如果有,则在dataGridView中,定位到该数据所在行的位置,如果没有则提示,没有找到。
"定位“按钮的代码(按照ID查找):
private void bt_studentdingwei_Click(object sender, EventArgs e)
{
DataTable rentTable = (DataTable)dataGridView4.DataSource;//获取数据源
dataGridView4.Rows[0].Selected = false;
int r;
for (int i = 0; i < rentTable.Rows.Count; i++)
{
dataGridView4.Rows[i].Selected = false;
}
if (int.TryParse(tb_studentID.Text, out r))
{
for ( int i = 0; i < rentTable.Rows.Count; i++)
{
if (rentTable.Rows[i]["ID"].ToString() == tb_studentID.Text)
{
// dataGridView4.Rows[i-1].ReadOnly = true;
dataGridView4.Rows[i].Selected = true;
// ID.Enabled = false;
dataGridView4.FirstDisplayedScrollingRowIndex = i;
btn_studentAdd.Enabled = false;
btn_studentxiugai.Enabled = true;
btn_studentDel.Enabled = true;
// tb_ID.Text = "";
tb_Name.Text = "";
tb_Age.Text = "";
return;
}
}
MessageBox.Show("ID不存在!", "提示");
btn_studentAdd.Enabled = true;
btn_studentxiugai.Enabled = false;
btn_studentDel.Enabled = false;
//tb_ID.Text = "";
tb_Name.Text = "";
tb_Age.Text = "";
}
else
MessageBox.Show("请输入ID!", "提示");
}
结果;
3.3 修改数据
思路:在dataGrideView中点击想要修改的数据,此处需要添加一个点击单元格事件,将所点击所在行的数据分别填充到已放置好的textbox中,然后在textbox中修改数据,注意主键的值不能修改。
1.设置datagridview属性:全行选择、添加点击单元格事件
private void dataGridView4_CellClick(object sender, DataGridViewCellEventArgs e)
{
tb_studentID.Text = dataGridView4.SelectedCells[0].Value.ToString();
tb_Name.Text = dataGridView4.SelectedCells[1].Value.ToString();
tb_Age.Text = dataGridView4.SelectedCells[2].Value.ToString();
}
”修改“按钮的代码
private void btn_studentxiugai_Click_1(object sender, EventArgs e)
{
//UpdateData_student();
if (connState == false)
{
MessageBox.Show("数据库连接错误");
}
else
{
if (tb_studentID.Text == null|| tb_Name.Text ==null || tb_Age.Text ==null)
{
MessageBox.Show("点击需要修改的数据", "提示");
}
try
{
DataTable dt = ds.Tables["cs"];
sda.FillSchema(dt, SchemaType.Mapped);
DataRow dr = dt.Rows.Find(tb_studentID.Text);//主键
dr["Name"] = this.tb_Name.Text.Trim();
dr["Age"] = this.tb_Age.Text.Trim();
MySqlCommandBuilder cmdbuider = new MySqlCommandBuilder(sda);
sda.Update(dt);
tb_studentID.Text = "";
tb_Name.Text = "";
tb_Age.Text = "";
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "提示");
}
}
}
结果(将ID=4的Age值,改为3333888):
3.4 删除数据
思路:在dataGrideView中点击想要修改的数据,点击”删除“按钮。此处将加载数据的代码单独放在一个方法中,这样执行完删除操作后,调用此方法,即可重新加载新数据表。
"删除“按钮代码
private void btn_studentDel_Click(object sender, EventArgs e)
{
//定义删除数据的SQL语句
// string strsql = "delete from tb_PDic where ID=2";
string strsql = "delete from " + tb_tablename.Text.Trim() + " where ID=" + tb_studentID.Text.Trim();
try
{
if (connState == true)
{
DialogResult dr = MessageBox.Show("确定删除?", "服务器信息", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dr == DialogResult.Yes)
{
cmd = new MySqlCommand(strsql, conn); //创建SqlCommand对象
if (Convert.ToInt32(cmd.ExecuteNonQuery()) > 0)
{//判断ExecuteNonQuery方法返回的参数是否大于0,大于0表示删除成功
MessageBox.Show("删除成功!");
jiazaistudent();
tb_studentID.Text = "";
tb_Name.Text = "";
tb_Age.Text = "";
}
else
{
MessageBox.Show("删除失败!不存在该条记录!!!");
}
}
else
{
return;
}
}
else
{
MessageBox.Show("数据库未连接");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void jiazaistudent()
{ //加载数据
MySqlCommand cmd = new MySqlCommand("select * from " + tb_tablename.Text.Trim(), conn);//注意空格
sda = new MySqlDataAdapter();
sda.SelectCommand = cmd;
ds = new DataSet();
try
{
sda.Fill(ds, "cs");
dataGridView4.DataSource = ds.Tables[0];
}
catch (Exception ex)
{
MessageBox.Show("该数据表不存在!\r" + ex.Message);
}
}
结果(将 ID=4该行的数据删除)
3.5 插入数据
由于主键值不能重复,此数据表中ID为主键,所以先查询要插入的数据主键是否已经存在,如果不存在,”添加“按钮的功能才能使用,然后再textbox中填入其他数据,然后点击”添加“按钮
”添加“按钮代码
private void btn_studentAdd_Click(object sender, EventArgs e)
{
//定义插入数据的SQL语句
string strsql = "INSERT INTO tb_Login VALUES('11','昨天','233');";
string strsql2 = "INSERT INTO " + tb_tablename.Text.Trim() + " VALUES('" + tb_studentID.Text.Trim() + "','" + tb_Name.Text.Trim() + "','" + tb_Age.Text.Trim() + "');";
if (connState == true)
{
try
{
cmd = new MySqlCommand(strsql2, conn); //创建SqlCommand对象
if (Convert.ToInt32(cmd.ExecuteNonQuery()) > 0)
{//判断ExecuteNonQuery方法返回的参数是否大于0,大于0表示操作成功
jiazaistudent();
tb_studentID.Text = "";
tb_Name.Text = "";
tb_Age.Text = "";
btn_studentxiugai.Enabled = true;
btn_studentDel.Enabled = true;
}
else
{
MessageBox.Show("失败!");
}
}
catch (Exception ex)
{
MessageBox.Show("失败!" + ex.Message);
}
}
else
{
MessageBox.Show("数据库未连接");
}
}
步骤