C#自定义数据库工具类

6 篇文章 1 订阅
1 篇文章 0 订阅

背景

最近老是要做后台的底层数据处理操作,重写了无数份类似的代码,也修改了无数重犯的bug,没办法,只能想着搞一个通用的类库来给自己减轻负担

步骤

1.打开vs2019新建一个C#空项目

2.右键单击解决方案框里的引用,进入弹出菜单中的管理NUGET包
在这里插入图片描述
3.搜索并安装mysql数据库驱动
在这里插入图片描述
4.回到项目,新增一个类,命名为MySqlHandler.cs,内容如下

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

namespace MySqlUtils
{
    /// <summary>
    /// 我的数据库操作类
    /// </summary>
    public class MySqlHandler
    {
        /// <summary>
        /// 数据库地址
        /// </summary>
        private readonly string host = string.Empty;

        /// <summary>
        /// 数据库端口号
        /// </summary>
        private readonly string port = string.Empty;

        /// <summary>
        /// 数据库用户
        /// </summary>
        private readonly string user = string.Empty;

        /// <summary>
        /// 数据库密码
        /// </summary>
        private readonly string password = string.Empty;

        /// <summary>
        /// 数据库名称
        /// </summary>
        private readonly string database = string.Empty;

        /// <summary>
        /// 连接超时
        /// </summary>
        private readonly string connecttimeout = string.Empty;

        /// <summary>
        /// 带参构造
        /// </summary>
        /// <param name="filepath">配置文件</param>
        /// <exception cref="Exception"></exception>
        public MySqlHandler(string filepath)
        {
            try
            {
                string[] rows = File.ReadAllLines(filepath);
                foreach (string line in rows)
                {
                    string[] row = line.Split('=');
                    switch (row[0].ToUpper())
                    {
                        case "HOST":
                        case "地址":
                            host = row[1];
                            break;
                        case "PORT":
                        case "端口":
                            port = row[1];
                            break;
                        case "USER":
                        case "用户名":
                            user = row[1];
                            break;
                        case "PASSWORD":
                        case "密码":
                            password = row[1];
                            break;
                        case "DATABASE":
                        case "数据库":
                            database = row[1];
                            break;
                        case "CONNECTTIMEOUT":
                        case "连接超时":
                            connecttimeout = row[1];
                            break;
                        default:
                            throw new Exception($"意外的配置字段[{row[0]}]!");
                    }
                }

                FieldInfo[] fieldInfos = this.GetType().GetFields();
                foreach (FieldInfo fieldInfo in fieldInfos)
                {
                    if ((string)fieldInfo.GetValue(fieldInfo.Name) == string.Empty)
                    {
                        throw new Exception($"字段[{fieldInfo.Name}]未进行配置!");
                    }
                }
            }
            catch
            {
                throw;
            }
        }

        /// <summary>
        /// 获取数据库连接
        /// </summary>
        /// <returns></returns>
        private MySqlConnection GetMySqlConnection()
        {
            //连接串
            string connectstring = $"host={host};port={port};user={user};password={password};database={database};connect timeout={connecttimeout};Integrated Security=false;";
            //返回数据库连接对象
            return new MySqlConnection(connectstring);
        }

        /// <summary>
        /// 查询操作
        /// </summary>
        /// <param name="cmdText">sql语句</param>
        /// <param name="commmandTimeout">查询超时,默认是10秒</param>
        /// <returns>查询结果</returns>
        public List<List<string>> Query(string cmdText, int commandTimeout=10)
        {
            //结果
            List<List<string>> data = new List<List<string>>();

            //数据库连接
            MySqlConnection mySqlConnection = GetMySqlConnection();
            //数据库读取器
            MySqlDataReader mySqlDataReader = null;

            try
            {
                //打开数据库连接
                mySqlConnection.Open();

                //数据库命令对象
                MySqlCommand mySqlCommand = new MySqlCommand(cmdText, mySqlConnection) { CommandTimeout = commandTimeout };

                //执行sql命令
                mySqlDataReader = mySqlCommand.ExecuteReader();

                //读取器获取到数据
                if (mySqlDataReader.HasRows)
                {
                    //一行一行读取
                    while (mySqlDataReader.Read())
                    {
                        //此行内容
                        List<string> row = new List<string>(mySqlDataReader.FieldCount);

                        //依次读取每一个字段
                        for (int i = 0; i < mySqlDataReader.FieldCount; i++)
                        {
                            //初始化字段为空
                            string col = string.Empty;

                            //尝试读取
                            try
                            {
                                col = mySqlDataReader.GetString(i);
                            }
                            catch
                            {
                                //吃掉读取错误
                            }

                            row.Add(col);
                        }

                        //将此行内容加到结果中
                        data.Add(row);
                    }
                }

                //返回结果
                return data;
            }
            catch
            {
                throw;
            }
            finally
            {
                //关闭读取器
                if (mySqlDataReader != null && !mySqlDataReader.IsClosed)
                {
                    mySqlDataReader.Close();
                }

                //关闭数据库连接
                if (mySqlConnection != null && mySqlConnection.State == System.Data.ConnectionState.Open)
                {
                    mySqlConnection.Close();
                }
            }
        }

        /// <summary>
        /// 更新操作
        /// </summary>
        /// <param name="cmdText">sql语句</param>
        /// <param name="commandTimeout">查询超时,默认是10秒</param>
        /// <returns>受影响的记录行数</returns>
        public int Update(string cmdText, int commandTimeout=10)
        {
            //数据库连接
            MySqlConnection mySqlConnection = GetMySqlConnection();

            try
            {
                //打开数据库连接
                mySqlConnection.Open();

                //数据库命令对象
                MySqlCommand mySqlCommand = new MySqlCommand(cmdText, mySqlConnection) { CommandTimeout = commandTimeout };

                //执行更新操作,并返回受影响的记录行数
                return mySqlCommand.ExecuteNonQuery();
            }
            catch
            {
                throw;
            }
            finally
            {
                //关闭数据库连接
                if (mySqlConnection != null && mySqlConnection.State == System.Data.ConnectionState.Open)
                {
                    mySqlConnection.Close();
                }
            }
        }
    }
}

5.建立配置文件,命名为mysql.txt,将其放在程序的bin/Debug/文件夹下,内容如下
在这里插入图片描述
在这里插入图片描述

6.测试数据库设置
在这里插入图片描述
我这边简单测试,建立了一个数据库,名命为student,里边建立一个表,命名为data,其表中分三个字段,分别是_index、_timestamp、_number。

7.建立测试类,名命为Demo.cs,内容如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MySqlUtils
{
    class Demo
    {
        /// <summary>
        /// 主函数
        /// </summary>
        static void Main()
        {
            string filepath = "mysql.txt";

            QueryDemo(filepath);

            Console.WriteLine("\n===========================\n");

            UpdateDemo(filepath);

            Console.ReadKey();
        }

        /// <summary>
        /// 查询样例
        /// </summary>
        static void QueryDemo(string filepath)
        {
            Console.WriteLine("start QueryDemo");

            //string filepath = @"C:\Users\bingling\Desktop\mysql.txt";

            MySqlHandler mySqlHandler = new MySqlHandler(filepath);

            string cmdText = "select * from data";

            try
            {
                List<List<string>> data = mySqlHandler.Query(cmdText);

                foreach (List<string> row in data)
                {
                    foreach (string col in row)
                    {
                        if (col == string.Empty)
                        {
                            Console.Write("null ");
                        }
                        else
                        {
                            Console.Write(col + " ");
                        }
                    }
                    Console.WriteLine();
                }

            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

            Console.WriteLine("end QueryDemo");
        }

        /// <summary>
        /// 更新样例
        /// </summary>
        static void UpdateDemo(string filepath)
        {
            Console.WriteLine("start UpdateDemo");

            //string filepath = @"C:\Users\bingling\Desktop\mysql.txt";

            MySqlHandler mySqlHandler = new MySqlHandler(filepath);

            string cmdText = "insert into data(_index,_time,_number) values('2','2021-07-15 00:00:00','2')";

            try
            {
                int row = mySqlHandler.Update(cmdText);

                Console.WriteLine("受影响记录行数:" + row);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

            Console.WriteLine("end UpdateDemo");
        }
    }
}

8.运行结果
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值