c# WinForm与 MySQL

本文详细描述了如何在WindowsForm项目中通过MySql.Data.dll库连接MySQL数据库,包括创建数据库、表,以及使用C#代码进行数据操作,如查询、插入、修改和删除,同时展示了表格界面的设计和事件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前跟着教材实现了 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("数据库未连接");
    }
}

步骤

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值