Files
aquarium-management-system/Database/OleDBHandler.cs
T
2026-07-12 16:06:18 +04:00

128 lines
5.2 KiB
C#

using System;
using System.Windows.Forms;
using System.Data;
using System.Data.OleDb;
using System.Text;
namespace Database {
static public class OleDBHandler {
static private OleDbConnection connection;
static public OleDbConnection Connection {
get {
if (connection == null) {
InitializeConnection();
}
return connection;
}
}
static private void InitializeConnection() {
try {
using (var ofDlg = new OpenFileDialog()) {
ofDlg.InitialDirectory = "c:\\";
ofDlg.Filter = "Access database files (*.accdb;*.mdb)|*.accdb;*.mdb";
ofDlg.RestoreDirectory = true;
ofDlg.CheckFileExists = true;
if (ofDlg.ShowDialog() == DialogResult.OK) {
connection = new OleDbConnection(string.Format(
"Provider = Microsoft.ACE.Oledb.12.0; Data Source = {0}"
, ofDlg.FileName
));
}
else {
Environment.Exit(0);
}
}
connection.Open();
}
catch (Exception e) {
MessageBox.Show(
e.Message
, "Database connection error"
, MessageBoxButtons.OK
, MessageBoxIcon.Error
);
Environment.Exit(e.HResult);
}
}
public enum ExecuteType { NonQuery, Scalar };
public static object Execute(string command, ExecuteType type)
{
using (var statement = new OleDbCommand(command, Connection))
{
switch (type)
{
case ExecuteType.NonQuery:
return statement.ExecuteNonQuery();
case ExecuteType.Scalar:
return statement.ExecuteScalar();
default:
throw new ArgumentException("An unsupported method is specified");
}
}
}
public static OleDbCommand SelectCommand(string tableName, string fields)
{
var command = $"SELECT {fields} FROM [{tableName}];";
return new OleDbCommand(command, Connection);
}
public static bool Delete(string tableName, int id) {
string command = $"DELETE FROM [{tableName}] WHERE [id] = {id};";
var result = Execute(command, ExecuteType.NonQuery);
return Convert.ToBoolean(result);
}
private static string UpdatePart(params (string, object)[] listPairColumnNameValue) {
StringBuilder result = new StringBuilder(string.Empty);
var size = listPairColumnNameValue.Length;
if (size < 1)
return result.ToString();
foreach (var pair in listPairColumnNameValue)
if(pair.Item2 is string)
result.Append($"[{pair.Item1}]='{pair.Item2}',");
else
result.Append($"[{pair.Item1}]={pair.Item2},");
return result.ToString().TrimEnd(',');
}
public static bool Update(string tableName, int id, params (string, object)[] listPairColumnNameValue)
{
string partCommand = UpdatePart(listPairColumnNameValue);
if (partCommand.Length < 1)
return true;
string command = $"UPDATE [{tableName}] SET {partCommand} WHERE [id] = {id};";
var result = Execute(command, ExecuteType.NonQuery);
return Convert.ToBoolean(result);
}
private static string InsertPart(params (string, object)[] listPairColumnNameValue)
{
var size = listPairColumnNameValue.Length;
if (size < 1)
return string.Empty;
StringBuilder left = new StringBuilder("(");
StringBuilder right = new StringBuilder("VALUES (");
foreach (var pair in listPairColumnNameValue) {
left.Append('[');
left.Append(pair.Item1);
left.Append("],");
if (pair.Item2 is string)
right.Append('\'' + pair.Item2.ToString() + '\'' + ',');
else
right.Append(pair.Item2.ToString() + ',');
}
var leftResult = left.ToString().TrimEnd(',') + ')';
var rightResult = right.ToString().TrimEnd(',') + ')';
return leftResult + rightResult;
}
public static bool Insert(string tableName, params (string, object)[] listPairColumnNameValue)
{
string partCommand = InsertPart(listPairColumnNameValue);
if (partCommand.Length < 1)
return true;
string command = $"INSERT INTO [{tableName}] {partCommand};";
var result = Execute(command, ExecuteType.NonQuery);
return Convert.ToBoolean(result);
}
}
}