128 lines
5.2 KiB
C#
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);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|