创建一个数据库类DatabaseHelper.cs,有关数据库的操作都放在这里面,增加代码复用性,减少耦合。
DatabaseHelper.cs的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using System.Data;
using Compunet.YoloV8.Data;
namespace WinFormsApp1
{
public class DatabaseHelper
{
private readonly string connectionString;
//用来连接数据库
public DatabaseHelper(string server, string database, string user, string password)
{
connectionString = $"Server={server};Database={database};User ID={user};Password={password};";
}
private MySqlConnection GetConnection()
{
return new MySqlConnection(connectionString);
}
//查询所有,返回一个DataTable类型的数据,因为我前面是winform界面,DataTable类型的数据可以直接显示在DataGridView控件中
public DataTable GetDataSet()
{
string query = "SELECT * FROM record";
return ExecuteQuery(query);
}
//根据传入的开始时间和结束时间查询记录
public DataTable SelectByTime(string start,string end)
{
string query = "SELECT * FROM record WHERE predictDate BETWEEN @StartTime AND @EndTime;";
var parameters = new MySqlParameter[]
{
new MySqlParameter("@StartTime", start),
new MySqlParameter("@EndTime",end),
};
DataTable dt = new DataTable();
dt=ExecuteQuery(query, parameters);
return dt;
}
//插入数据
public void InsertData(Record record)
{
string query = "INSERT INTO record (url, boxes,speed,predictResult,predictDate) VALUES (@url, @boxes,@speed,@predictResult,@predictDate)";
var parameters = new MySqlParameter[]
{
new MySqlParameter("@url", record.url),
new MySqlParameter("@boxes", record.boxes),
new MySqlParameter("@speed", record.speed),
new MySqlParameter("@predictResult", record.predictResult),
new MySqlParameter("@predictDate", record.predictDate),
};
ExecuteNonQuery(query, parameters);
}
public bool Connect(out MySqlConnection connection)
{
connection = new MySqlConnection(connectionString);
try
{
connection.Open();
return true;
}
catch (Exception ex)
{
Console.WriteLine($"连接数据库失败: {ex.Message}");
connection = null;
return false;
}
}
//返回int型
public int ExecuteNonQuery(string query, MySqlParameter[] parameters = null)
{
using (var connection = GetConnection())
{
connection.Open();
using (var command = new MySqlCommand(query, connection))
{
if (parameters != null)
{
command.Parameters.AddRange(parameters);
}
return command.ExecuteNonQuery();
}
}
}
//返回data数据
public DataTable ExecuteQuery(string query, MySqlParameter[] parameters = null)
{
using (var connection = GetConnection())
{
using (var command = new MySqlCommand(query, connection))
{
if (parameters != null)
{
command.Parameters.AddRange(parameters);
}
using (var adapter = new MySqlDataAdapter(command))
{
var dataTable = new DataTable();
adapter.Fill(dataTable);
return dataTable;
}
}
}
}
}
}
演示一下怎么调用:
1.连数据库的信息我是单独存放在了一个ConnectInfo.cs类中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WinFormsApp1
{
public class ConnectInfo
{
public static string server { get; set; } = "localhost"; // 本地MySQL服务器
public static string database { get; set; } = "yolo"; // 数据库名称
public static string username { get; set; } = "root"; // 用户名
public static string password { get; set; } = "123456"; // 密码
}
}
2.声明数据库类DatabaseHelper,调用方法
3.然后就可以调用方法:
我的数据库类中只写了查询和插入的方法,其他的方法大同小异