Короче спорил я на одном сайте, мне говорят что я мол бумбум в программирование, затроллили меня. Решил поделиться некими знаниями... Сначало покажу код, а потом опишу что к чему...
Класс 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; } } }