Заставка

Программирование на старых и современных языках, а так-же дизайн

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование на старых и современных языках, а так-же дизайн » C# » Мой алгоритм работы с СУБД


Мой алгоритм работы с СУБД

Сообщений 1 страница 5 из 5

1

Короче спорил я на одном сайте, мне говорят что я мол бумбум в программирование, затроллили меня. Решил поделиться некими знаниями... Сначало покажу код, а потом опишу что к чему...

Класс 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;
        }
    }
}

0

2

SQLGenerator библиотека, которая генерирует SQL используя методы, например:
SELECT:

Код:
String strSQL = new SQLGenerator().select("Firstname, Lastname, Gender").from("Person").where("Gender = 'M'").toString();

Результат:
SELECT Firstname, Lastname, Gender FROM Person WHERE Gender='M'

INSERT:

Код:
List<String>arrFields = new List<String>();
arrFields.Add("Firstname");
arrFields.Add("Lastname");
arrFields.Add("Gender");
String strSQL = new SQLGenerator().insert_into("Person", arrFields, "@").toString();

Результат:
INSERT INTO Person(Firstname, Lastname, Gender) VALUES(@Firstname, @Lastname, @Gender);

UPDATE:

Код:
String strSQL = new SQLGenerator().update("Person").set("Gender='F'").where("PersonID=1").toString();

Результат:
UPDATE Person SET Gender='F' WHERE PersonID=1

DELETE:

Код:
String strSQL = new SQLGenerator().delete().from("Person").where("PersonID=1").toString();

Результат:
DELETE FROM Person WHERE PersonID=1

0

3

SQL библиотека высокого уровня, выполняет SQL и возвращает значение. Например:

Запись в СУБД:

Код:
String strDB = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\DEMOCTL\Users.mdb";
List<OleDbParameter>parames = new List<OleDbParameter>();
parames.Add(new OleDbParameter("@UserID", "1"));
parames.Add(new OleDbParameter("@Username", "demo"));
parames.Add(new OleDbParameter("@Password", "demo"));
Database.SQL.NonQuery(strDB, parames, "INSERT INTO User(UserID, Username, Passwrod) VALUES(@UserID, @Username, @Passwrod)", true);

Отображение в ComboBox:

Код:
this.cboUsers.DisplayMember = "Username";
this.cboUsers.ValueMember = "UserID";
this.comboBox1.DataSource =  Database.SQL.Query(strDB, null, "SELECT UserID, Username FROM Users");

0

4

SQLForm библиотека высокого уровня, которая считывает поля из формы, и сохраняет в базу данных, или считывает из базы данных и отображает в форму. Чтобы всё заработало, нужно в элементах управления использовать Tag.

0

5

Tag вот это я имею ввиду:
https://i.ibb.co/j6cfsBf/tag-vs-vb6-06-36-19-06-2021-min.jpg

0


Вы здесь » Программирование на старых и современных языках, а так-же дизайн » C# » Мой алгоритм работы с СУБД