Короче спорил я на одном сайте, мне говорят что я мол бумбум в программирование, затроллили меня. Решил поделиться некими знаниями... Сначало покажу код, а потом опишу что к чему...
Класс SQLGenerator.cs:
using System;
using System.Collections.Generic;
namespace Database {
public class JOINTYPE {
public static String INNER_JOIN = "INNER JOIN";
public static String LEFT_JOIN = "LEFT JOIN";
public static String RIGHT_JOIN = "RIGHT JOIN";
public static String OUTER_JOIN = "OUTER JOIN";
public static String FULL_OUTER_JOIN = "FULL OUTER JOIN";
}
public class SQLGenerator {
private String strSQL; // Строка в которой будет храниться SQL
private bool bHasSelect; // Есть ли SELECT
private bool bHasFrom; // Есть ли FROM
private bool bHasWhere; // Есть ли WHERE
private bool bHasJoin; // Есть ли JOIN
private bool bHasUpdate; // Есть ли UPDATE
private bool bHasDelete; // Есть ли DELETE
// Конструктор, инициализируем некоторые переменные
public SQLGenerator() {
strSQL = "";
bHasSelect = false;
bHasFrom = false;
bHasWhere = false;
bHasJoin = false;
bHasDelete = false;
}
// Добавляет в строку SQL
private void setSQL(String strSQL) {
this.strSQL += strSQL;
}
/////////////////////// SELECT
// Генерация SELECT
public SQLGenerator select(String strCond) {
if (bHasSelect == false) {
bHasSelect = true;
setSQL("SELECT " + strCond);
return this;
}
return null;
}
// Генерация FROM
public SQLGenerator from(String strTable) {
if (bHasSelect == true || bHasDelete == true) {
bHasFrom = true;
setSQL(" FROM " + strTable);
return this;
}
return null;
}
// Генерация WHERE
public SQLGenerator where(String strCond) {
if ((bHasSelect == true && bHasFrom == true && bHasWhere == false) || bHasUpdate == true || bHasDelete == true) {
bHasWhere = true;
this.setSQL(" WHERE " + strCond);
return this;
}
return null;
}
public SQLGenerator join(String type, String strTable) {
bHasJoin = true;
this.setSQL(" " + type.ToString() + " " + strTable + " ");
return this;
}
public SQLGenerator on(String strCond) {
if (bHasJoin == true)
this.setSQL(" ON " + strCond + " ");
return this;
}
/////////////////////// INSERT
public SQLGenerator insert_into(String strTable, List<String> arrFIelds, String sep) {
bool isFirst = true;
this.setSQL("INSERT INTO " + strTable + "(");
foreach (String strField in arrFIelds) {
if(isFirst == true) {
this.setSQL(strField);
isFirst = false;
}
else
this.setSQL("," + strField);
}
isFirst = true;
this.setSQL(") VALUES(");
foreach (String strField in arrFIelds) {
if (isFirst == true) {
setSQL(sep + strField);
isFirst = false;
}
else
setSQL("," + sep + strField);
}
setSQL(")");
return this;
}
/////////////////////// Update
public SQLGenerator update(String strTable) {
bHasUpdate = true;
setSQL("UPDATE " + strTable);
return this;
}
public SQLGenerator set(String strCond) {
if (bHasUpdate == true)
setSQL(" SET " + strCond);
return this;
}
/////////////////////// DELETE
public SQLGenerator delete() {
setSQL("DELETE ");
bHasDelete = true;
return this;
}
// Возвращает сгенерированный SQL
public String getSQL() {
return strSQL;
}
// Возвращает сгенерированный SQL
public String toString() {
return strSQL;
}
}
}
Класс SQL.cs:
using System;
using System.Data;
using System.Data.OleDb;
using System.Collections.Generic;
namespace Database {
public class SQL {
// Вызов SQL запроса SELETE
public static DataTable Query(String strConnectionString, OleDbParameter[] arrFields, String strSQL) {
OleDbConnection con = new OleDbConnection(strConnectionString);
DataTable dt = new DataTable();
con.Open();
OleDbDataAdapter da = new OleDbDataAdapter(strSQL, con);
if(arrFields != null) {
foreach (var item in arrFields)
da.SelectCommand.Parameters.Add(item);
}
da.Fill(dt);
return dt;
}
// Вызов SQL запроса INSERT, DELETE, UPDATE
public static object NonQuery(String strConnectionString, List<OleDbParameter> arrFields, String strSQL, bool isUpdate)
{
int NewID = 0;
OleDbConnection con = new OleDbConnection(strConnectionString);
con.Open();
OleDbCommand cmd = new OleDbCommand(strSQL, con);
foreach(var item in arrFields)
cmd.Parameters.Add(item);
cmd.ExecuteNonQuery();
if (isUpdate == false)
NewID = (int)cmd.ExecuteScalar();
con.Close();
cmd.Dispose();
if (isUpdate == false)
return (int)NewID;
return null;
}
}
}
Класс SQLForm.cs:
using System;
using System.Windows.Forms;
using System.Data;
using System.Data.OleDb;
using System.Collections.Generic;
namespace Database {
public class SQLForm {
private OleDbConnection con = null;
private OleDbCommand cmd = null;
private OleDbDataAdapter da = null;
private OleDbDataReader dr = null;
private Form frm = null;
private String strConnectionString = "";
private List<String> arrItems = null;
// Конструктор, frm - форма, strConnectionString - строка подключение к СУБД
public SQLForm(Form frm, String strConnectionString) {
if (frm == null) return;
this.strConnectionString = strConnectionString;
this.frm = frm;
arrItems = new List<String>();
}
// Только считываем
public void ReadData(String strSQL) {
con = new OleDbConnection(strConnectionString);
con.Open();
cmd = new OleDbCommand(strSQL, con);
dr = cmd.ExecuteReader();
if(dr.Read()) {
foreach (Control c in frm.Controls) {
if (c.Tag != null) {
if (c.Tag.ToString().Length > 0) {
c.Text = dr[c.Tag.ToString()].ToString();
}
}
}
}
cmd.Dispose();
con.Close();
}
// Вставляем, обновляем, или удаляем
public Object SaveData(String strSQL, bool isUpdate) {
int NewID = 0;
con = new OleDbConnection(strConnectionString);
con.Open();
cmd = new OleDbCommand(strSQL, con);
foreach (Control c in frm.Controls) {
if (c.Tag != null) {
if (c.Tag.ToString().Length > 0) {
cmd.Parameters.AddWithValue(c.Tag.ToString(), c.Text.ToString());
}
}
}
cmd.ExecuteNonQuery();
if (isUpdate == false)
NewID = (int)cmd.ExecuteScalar();
con.Close();
cmd.Dispose();
if (isUpdate == false)
return (int)NewID;
return null;
}
}
}
