[C#] WinForm/WPF 实现数据库连接与操作(MySQL)

这篇具有很好参考价值的文章主要介绍了[C#] WinForm/WPF 实现数据库连接与操作(MySQL)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

🌿前言

🌿MySQL数据库简介

🌿数据库的基本概念

🌿ADO.NET体系结构

  • 数据提供程序(.NET Framework Data Provider)
  • 程序数据集(DataSet)

🌿数据库的访问形式

🌿数据库的连接

🌿实现增查改删(CRUD)操作

  • CRUD SQL常用语句
  • 程序实现数据读取操作
  • 程序实现增删改操作

🌿前言

数据库的使用在涉及或以信息管理为主的软件设计中是不可或缺的一部分。开发人员需要了解数据库基本概念,熟系对数据库的使用,包括基本的可视化软件管理,SQL语句命令操作。为实现窗体软件(WinForm/WPF)对数据库进行读取和写入操作,需要先了解数据库的访问形式,了解ADO.NET结构,掌握使用程序对数据库进行连接实现,能够对数据库进行增删查改操作。本文从数据库的基本使用,到使用程序实现增删查改操作,借助.NET API文档理解相关数据库操作类,完整介绍WinForm/WPF实现数据库连接与操作的方法。[注:本文多以个人理解与应用测试角度编写,如有表达不妥或结构错误的部分,欢迎批评指正。]

🌿MySQL数据库简介

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一。2006年,Oracle收购InnoDB引擎,这深刻影响了后来MySQL的发展——因为MySQL被卖身两次后归于Oracle麾下。2008年,瑞典MySQLAB公司被Sun收购。次年,Sun被Oracle收购,MySQL数据库被一并纳入Oracle,进入OracleMySQL时代。2010年发布的MySQL5.5版本中,将其默认的存储引擎由MyISAM更换为InnoDB。

🌿数据库的基本概念

比较普遍的定义是,数据库(Database,DB)是一个长期储存在计算机内的、有组织、有共享、统一管理的数据集合。数据库的基本组成包括字段、记录、数据表、数据库和主键。

字段 Field 二维表中的列,描述关系的属性特征
记录 Record 二维表中的行
数据表 Table 没有重复的行列构成的关系表
数据库 Database 多个相关联数据表的集合
主键 Key

能够唯一标识不同记录的单个或多个字段的组合

🌿ADO.NET体系结构

.NET编程环境中优先使用数据访问接口ADO.NET提供了平台互用性和可伸缩的数据访问。ADO.NET 提供对诸如 SQL Server 和 XML 这样的数据源以及通过 OLE DB 和 ODBC 公开的数据源的一致访问。 共享数据的使用方应用程序可以使用 ADO.NET 连接到这些数据源,并可以检索、处理和更新其中包含的数据。

[C#] WinForm/WPF 实现数据库连接与操作(MySQL)
ADO.NET体系结构图

数据提供程序(.NET Framework Data Provider)

Connection:数据连接类,建立与数据源的连接

Command:数据命令类,使用SQL语句对数据源执行操作命令,用于修改数据、查询数据、运行存储过程,其中,Parameter为参数,参数前面有一个“@”符号,表示它将被视为参数

DataReader:数据读取类,用于从数据源读取数据流

DataAdapter:数据流转类,Fill()方法将数据源数据填充至“内存”数据集DataSet,Update()方法将数据集中的数据更新至数据源中

程序数据集(DataSet)

实现独立于任何数据源的断开式数据访问,其包含任意多个数据表(DataTable)

🌿数据库的访问形式

非断开式:持续保持连接,直到执行关闭命令,占用连接资源,数据更新及时

断开式:数据完成读取/更新后立即断开,执行效率高,占用时间短,数据更新不及时

🌿数据库的连接

使用Connection对象实现数据库的连接,其提供Open()方法进行数据库的连接,Close()方法断开连接。编写连接语句,将其作为参数传入Connection类的构造方法中。对于使用MySQL数据库时,可以先使用NuGet包管理器对项目安装MySql.Data的资源包,并引用相关命名空间。

using MySql.Data.MySqlClient;
private void ConnectionDatabase()
{
    string conStr = "server=localhost;user id=root;password=123456;database=studentmanage";
    MySqlConnection con = new MySqlConnection(conStr);
    con.Open();
    MessageBox.Show("数据库连接成功!");
    con.Close();
}

在具体使用时,要根据自己在安装MySQL时的相关配置,输入对应的账号密码。为了保证封装特性以及设计模式中的开闭原则,我们通常将数据库的连接语句写在配置文件中,后期对软件的使用修改时只需操作配置文件即可,无需修改原有代码。对于配置文件,我们需要向其中加入键值对。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<connectionStrings>
		<add name="conStr" connectionString="server=localhost;user id=root;password=123456;database=studentmanage;Charset=utf8;"/>
	</connectionStrings>

调用相关命名空间后,在方法中我们读取配置文件中的键值。

using System.Configuration;

MySqlConnection conn=null;
string connStr = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;
conn = new MySqlConnection(connStr);
conn.Open();

在大型项目中,我们一般定义一个类,专门用于实现对数据库的连接和操作,在该类中设置一个Connection属性,每当调用到该属性时,就自动实现对数据库的连接。

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LibraryManage
{
    internal class DBOper
    {
        private static MySqlConnection conn;

        //Connection属性,调用时建立对数据库的连接
        public static MySqlConnection Connection
        {
            get
            {
                //无Connection对象时
                if (conn == null)
                {
                    string connStr = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;
                    conn = new MySqlConnection(connStr);
                    conn.Open();
                }
                //Connection对象关闭连接时
                else if (conn.State==System.Data.ConnectionState.Closed) 
                {conn.Close(); }
                //Connection对象断开连接时
                else if (conn.State == System.Data.ConnectionState.Broken)
                {conn.Close(); conn.Open(); }
                return conn;
            }
        }
    }
}

🌿实现增查改删(CRUD)操作

对于数据库的操作,一般掌握顺序是查增改删,下面均以这个顺序介绍CRUD SQL常用语句与程序实现CRUD的操作步骤。

CRUD SQL常用语句

CRUD SQL 常用语句
读取
Read
select <字段列表> from <表或视图> where <查询条件>; 基本查询语句
select * form <表>; 查询整表(“*”通配符查询所有字段)
select <字段列表> from <表>; 查询指定字段
select <字段列表> from <表> where <字段> in (<取值列表>); 多取值条件查询
select <字段列表> from <表> where <字段> between <取值> and <取值>; 带取值范围查询
select <字段列表> from <表> where <字段> like '%<字符串>%'; 包含内容查询,常用于模糊搜索功能
增加
Create
insert into <表> (<字段列表>) values (<赋值列表>); 指定字段插入一条新记录
insert into <表> (<字段列表>) values (<赋值列表1>),(<赋值列表2>),...,(<赋值列表n>); 同时插入多条记录

修改

Update

update <表> set <字段1>=<赋值1>,<字段2>=<赋值2>,...,<字段n>=<赋值n> where <主键条件> 修改指定主键的记录
删除
Delete
delete from <表> where <主键条件>

删除指定主键的记录

程序实现数据读取操作

对于部分数据的读取,一般直接使用DataReader对象,DataReader对象通过Command对象的ExecuteReader()方法读取数据表。

string sql = "select * from mainstudent where num=" + current;
string conStr = "server=localhost;user id=root;password=123456;database=studentmanage";
MySqlConnection con = new MySqlConnection(conStr);
con.Open();

MySqlCommand cmd = new MySqlCommand(sql, con);//设置Command对象的命令和连接器参数
MySqlDataReader reader = cmd.ExecuteReader();//DataReader对象通过Command对象的ExecuteReader()方法读取数据表

if(reader.Read())
{
    textBox1.Text = reader.GetString(0).ToString();
    textBox2.Text = reader.GetString(1);
}

reader.Close();
con.Close();

若使用DataAdapter对象进行读取,则需要先设置DataSet对线,通过DataAdpter对象的Fill()方法将数据源中的数据读取到DataSet中。

string conStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
MySqlConnection con=null;
MySqlDataAdapter adapter = null;
DataSet ds = null;

private void button1_Click(object sender, EventArgs e)
{
    con = new MySqlConnection(conStr);
    string sql = "select * from mainstudent";
    adapter = new MySqlDataAdapter(sql, con);
    ds= new DataSet();
    adapter.Fill(ds, "mainstudent");
    dataGridView1.DataSource = ds.Tables["mainstudent"];
}

在大型项目中,除了使用DataReader对象部分读取外,还可以将读取结果存在数据表(DataTable)中进行完整读取。

//GetReader()方法实现对数据库中的数据进行读取,返回DataReader对象
public static MySqlDataReader GetReader(string sql)//无参读取
{
    MySqlCommand cmd= new MySqlCommand(sql,Connection);
    return cmd.ExecuteReader();
}
public static MySqlDataReader GetReader(string sql,params MySqlParameter[] values)//有参读取
{
    MySqlCommand cmd = new MySqlCommand(sql, Connection);
    cmd.Parameters.AddRange(values);
    return cmd.ExecuteReader();
}

//GetDataTable()方法实现整个数据表的读取,返回DataTable对象
public static DataTable GetDataTable(string sql)
{
    MySqlDataAdapter da=new MySqlDataAdapter(sql,Connection);
    DataSet ds= new DataSet();
    da.Fill(ds);
    return ds.Tables[0];
}
public static DataTable GetDataTable(string sql, params MySqlParameter[] values)
{
    MySqlCommand cmd=new MySqlCommand( sql,Connection);
    cmd.Parameters.AddRange(values);
    MySqlDataAdapter da = new MySqlDataAdapter(cmd);
    DataSet ds=new DataSet();
    da.Fill(ds);
    return ds.Tables[0];
}

调用到这些方法时,只需要进行传参即可。

程序实现增删改操作

对数据库中的数据表进行增删改,可以使用Command对象或DataAdapter对象实现。使用Command对象对数据表进行增删改,首先需要将相关SQL语句与连接器对象参数传入Command对象的构造方法中,对于字段参数的赋值可以通过Parameters.AddWithValue()方法来实现,Command对象使用ExecuteNonQuery()方法实现对数据的修改。例如加入记录。

private void button4_Click(object sender, EventArgs e)
{
    string sql = "insert into mainstudent(num,name,sex) values(@num,@name,@sex)";
    string conStr = "server=localhost;user id=root;password=123456;database=studentmanage";
    MySqlConnection con = new MySqlConnection(conStr);
    MySqlCommand cmd=new MySqlCommand(sql, con);
    cmd.Parameters.AddWithValue("@num", 1);
    cmd.Parameters.AddWithValue("@name", "LiHua");
    cmd.Parameters.AddWithValue("@sex", "Man");

    con.Open();
    cmd.ExecuteNonQuery();//修改时使用的方法,不会造成内存泄漏
    con.Close();
    MessageBox.Show("数据增添成功");
}

对于修改和删除,操作方法是一样的,只需要更改相应的SQL语句以及参数设定,这里就不在演示代码。一般在大型项目中,定义一个专门类去实现对数据库的增删查改,通常写一个方法实现SQL语句的执行,进行增删改的操作,在其它类中分别定义增、改、删的方法,将参数引入,调用该类的方法。

//ExecuteCommand()方法,实现SQL语句的执行,进行增删改操作,返回受影响的行数
public static int ExecuteCommand(string  sql)//无参修改
{
    MySqlCommand cmd=new MySqlCommand(sql, Connection);
    return cmd.ExecuteNonQuery();//返回受影响的行数
}
public static int ExecuteCommand(string sql,params MySqlParameter[] values)//有参修改
{
    MySqlCommand cmd=new MySqlCommand(sql,Connection);
    cmd.Parameters.AddRange(values);
    return cmd.ExecuteNonQuery();
}

对于参数的传入,这里给出一个例子,调用上述方法实现数据的修改。

//修改书目
public static bool UpdateBook(Book book)
{
    string sql = @"update book set bookName=@bookName,writerName=@writerName,publishClub=@publishClub,version=@version,inventory=@inventory where ISBN=@ISBN";
    MySqlParameter p1 = new MySqlParameter("@bookName", book.BookName);
    MySqlParameter p2 = new MySqlParameter("@writerName", book.WriterName);
    MySqlParameter p3 = new MySqlParameter("@publishClub", book.PublishClub);
    MySqlParameter p4 = new MySqlParameter("@version", book.Version);
    MySqlParameter p5 = new MySqlParameter("@inventory", book.Inventory);
    MySqlParameter p6 = new MySqlParameter ("@ISBN", book.ISBN);

if (DBOper.ExecuteCommand(sql, p1, p2, p3, p4, p5, p6) == 1)
{
    return true;
}
    else { return false; }
}

当然,将所有的参数组成数组,再传入方法参数中也是可以的。

对于使用DataAdapter对象实现,先需要声明Command、DataAdapter和DataSet对象,建立CommandBuilder对象与DataAdapter对象之间的关联,在增加/删除记录时,可以使用DataSet的行或行集合对象去新增/删除行,最后再由DataAdapter对线执行Update()方法将数据集中的数据更新到数据源中。例如使用DataAdapter对数据进行记录增加。

string conStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
MySqlConnection con=null;
MySqlDataAdapter adapter = null;
DataSet ds = null;   
     
private void button4_Click(object sender, EventArgs e)
{
    MySqlCommandBuilder builder = new MySqlCommandBuilder(adapter);
    DataRow r1 = ds.Tables["mainstudent"].NewRow();
    r1[0] = textBox1.Text;
    r1[1] = textBox2.Text;
    ds.Tables[0].Rows.Add(r1);
    adapter.Update(ds, "mainstudent");
    dataGridView1.DataSource = ds.Tables["mainstudent"];
}

这里需要注意的是,当DataAdapter对象操作单个数据表时,可以利用CommandBuilder对象自动为DataAdapter提供的Insert、Update、Delete方法。

最后,在信息管理类型的项目中,对数据库的使用是必不可少的,开发人员需要熟练掌握数据库的连接方法,悉知常用的CRUD SQL语句,利用管理对象实现对数据的增删查改操作,对于Command与DataAdapter对象的选择,本文暂不概述。文章来源地址https://www.toymoban.com/news/detail-488736.html

到了这里,关于[C#] WinForm/WPF 实现数据库连接与操作(MySQL)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据库,JDBC连接数据库操作流程详细介绍

    在学完 MySQL 和 Java 后,我们通常会尝试使用 Java编译器 连接 MySQL数据库,从而达到使用编译器来操作数据库的效果。连接的这个过程会用 JDBC 相关知识,因此我把 JDBC 包的下载及导入流程,以及 JDBC 的使用流程整理下来分享给大家。 目录 1. 啥是JDBC? 2. JDBC依赖包 2.1 依赖包

    2024年02月06日
    浏览(76)
  • eclipse连接mysql数据库操作

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目录 前言 一、mysql数据库 二、eclipse项目里要有数据库jar包 1.下载或直接使用已有mysql-connection的jar包 2.eclipse加上MySQL 连接 3.项目执行sql文件 总结 使用eclipse的sql文件实现数据库数据创建 提示

    2024年02月04日
    浏览(26)
  • VS2022连接数据库MySQL,并进行基本的表的操作

    1.连接MYSQL 2.添加MySQL的引用 环境配置 测试代码 在vs里面运行sql语句 启动vs2022,在菜单栏里面选择视图,打开服务器资源管理器   右键数据连接,点击添加连接 然后发现有MySQL选项,进入里面配置数据库的相关信息即可 配置信息 1.server name输入MySQL的IP地址 localhost即本地 2.然后

    2024年02月09日
    浏览(66)
  • 分享一下Postman连接MySQL数据库的操作步骤,从安装开始讲起

    我们有时候做Postman接口测试时,需要操作数据库,比如:查询、新增、更新、删除数据等。这时就需要连接数据库,以MySQL数据库为例子,根据自己的总结,分享一下Postman连接数据库,以及对数据库中数据的操作步骤。 Postman要连接MySQL数据库,需要先安装xMySQL,并启动xMyS

    2023年04月08日
    浏览(32)
  • .net 连接MySql数据库 + 使用Microsoft.EntityFrameworkCore.Design自动生成实体类 + 使用EFCore操作数据库

    先准备好一个mysql数据库(我这里准备的是test数据库,里面又准备了两张表,其中book表中只有两个字段,Id(bigint类型)和 Name(varchar类型)) 使用VS新建一个asp.net core web api项目(我这里使用的框架是.net5.0的,确保版本对应很重要) 打开终端 进到项目所在目录(我这里解

    2024年02月07日
    浏览(30)
  • java通过JDBC连接mysql8.0数据库,并对数据库中的表进行增删改查操作

    目录 一、JDBC简介 二、添加依赖 三、JDBC操作数据库的步骤 四、JDBC操作数据库——增删改查 (一)新增数据 (二)删除数据 (三)修改数据 (四)查询数据 (五)多表连接查询         Java数据库连接,(Java Database Connectivity,简称JDBC)是java语言中用来规范客户端程序如何来访问数

    2024年02月03日
    浏览(52)
  • 使用Python进行数据库连接与操作SQLite和MySQL【第144篇—SQLite和MySQL】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在现代应用程序开发中,与数据库进行交互是至关重要的一环。Python提供了强大的库来连接和操作各种类型的数据库,其中包括SQLite和MySQL。

    2024年03月27日
    浏览(45)
  • C++实现MySQL数据库连接池

    MySQL数据库编程、单例模式、STL容器、C++11多线程(线程互斥、线程互斥、线程同步通信和unique_lock)、智能指针shared_ptr、lambda表达式、生产者-消费者线程模型。 为了提升MySQL数据库(基于C/S设计(客户端-服务器))的访问瓶颈,除了在服务器端增加缓冲服务器缓存常用的数

    2024年02月16日
    浏览(37)
  • idea实现Java连接MySQL数据库

    首先如果没有mysql的需要先下载MySQL,可以看这个教程: Mysql超详细安装配置教程(保姆级)_mysql安装及配置超详细教程-CSDN博客 官网:MySQL :: Download Connector/J 解压并将驱动jar包导入idea , 在Java项目中创建一个bin文件夹,然后把jar包Ctrl+C,V到bin文件夹   然后lib右键,点击Add as L

    2024年02月03日
    浏览(42)
  • 使用 GORM 连接数据库并实现增删改查操作

    首先,我们需要安装 GORM 包。在终端中运行以下命令: shell go get -u gorm.io/gorm 在 Go 代码的开头导入以下包: 在代码中建立数据库连接,示例中使用 MySQL 数据库作为示范: 请确保替换 user 、 password 和 dbname 为你的实际数据库凭据和名称。 在 GORM 中,我们需要定义模型结构来

    2024年02月15日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包