Зараз обговорюють

"Тобто є ряд завдань, які взагалі без рекурсії не наважуються."  - це як розуміти? Перефразуй, будь ласка. 

виправив, йшлося про те що деякі завдання можна вирішити лише при використанні рекурсії

Спасибі дуже корисна стаття

А ще щось планується подібного найближчим часом?


Дякую за підтримку, радий що Вам сподобалось!

Так маю вже майже дороблений проект по управлінні Audio файлом, на заміну стандартним клавішам управління HTML5, але ще не встиг відтестувати програвання файлів з інтернету, поки лише локально працює

Надіюсь найближчим часом дороблю й закину

Рахунки

webmoneyeur - E385818210641
usd - Z304643423050
uah - U354026817492
rub - R301704373231easypay80002677bitcoin1F5HRGroUtEQW9HBNbeew8iKh5KQ8vJxzw

Зворотній зв'язок

Для покращення роботи сайту надсилайте свої зауваження:
mailЗауваження
mailПропозиція

Статистика

UkrNET - поисково-информационный ресурс

C# : Використання баз даних Access. Виконання власних SQL запитів, а також збережених в БД

Для можливості виконання SQL запитів із своєї програми використаємо наступний клас.

Увага: Для коректної роботи підключення, необхідно робити окремий білд під x86 та окремо під x64 розрядний Windows, інакше можна отримати помилку, що такий Provider не зареєстровано.

access

AccessDB

Для використання даного класу необхідно підключити наступні бібліотеки:

using System;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;

і відповідно сам клас:

public class AccessDB
{
    private string connectionStr = "Provider=Microsoft.ACE.OLEDB.12.0;data source=";
	OleDbConnection myCon;
    public string dbPath;
    public AccessDB() { }
    public AccessDB(string newPath)
    {
        dbPath = newPath;
		myCon = new OleDbConnection(ConnectStr);
    }
    public string BasePath { get { return dbPath; } set { dbPath = value; } }
    public string ConnectStr { get { return connectionStr + dbPath; } }

    public DataTable GetData(string qyery)
    {
        try
        {
            using (myCon)
            using (OleDbDataAdapter adapter = new OleDbDataAdapter(qyery, myCon))
            {
                DataTable table = new DataTable();
                adapter.Fill(table);
                return table;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return null;
        }
    }
    public DataTable GetProcedure(string procedureName)
    {
        try
        {
            DataTable table = new DataTable();
            myCon.Open();
            OleDbCommand cmd = new OleDbCommand(procedureName, myCon);
            cmd.CommandType = CommandType.StoredProcedure;
            using (OleDbDataReader myReader = cmd.ExecuteReader())
            {
                table.Load(myReader);
            }
            myCon.Close();
            return table;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return null;
        }
    }
    public bool InsertData(string qyery)
    {
        try
        {
            OleDbCommand cmd = new OleDbCommand(qyery, myCon);
            cmd.CommandType = CommandType.Text;
            myCon.Open();
            cmd.ExecuteNonQuery();
            myCon.Close();
            return true;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return false;
        }
    }
    public bool PasteProcedure(string procedureName)
    {
        try
        {
            OleDbCommand cmd = new OleDbCommand(procedureName, myCon);
            cmd.CommandType = CommandType.StoredProcedure;
            myCon.Open();
            cmd.ExecuteNonQuery();
            myCon.Close();
            return true;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return false;
        }
    }
    public string ScreeningData(string str)
    {
        return str.Replace("'", "''");
    }
}

Приклади використання класу

Створюємо екземпляр класу:

AccessDB db = new AccessDB(@"D:\Test.accdb");

Отримання даних із бази по SQL запиту:

DataTable table = db.GetData("SELECT * FROM t1");
if (table!=null && table.Rows.Count>0)
{
	//можна опрацьовувати дані з отриманої таблиці. Наприклад виведення даних:
	MessageBox.Show(String.Format("{0} {1}", table.Rows[0]["ID"].ToString(), table.Rows[0]["value1"].ToString()));
}
else
{
	//таблиця пуста, або виникла помилка при вивантаженні (текст помилки відображається MessageBox)
}

Для вивантаження даних по збереженому запиті в БД слід використовувати метод GetProcedure який приймає як аргумент назву запиту який слід виконати. Дана можливість є досить зручною, так як для зміни логіки побудови SQL запиту не потрібно буде перекомпільовувати програму, а достатньо змінити запит в самій БД.

Отримання даних із бази по SQL запиту:

if (db.InsertData("UPDATE t1 SET value1='ok'"))
{
	//ваш код якщо дія виконана
}
else
{
	//ваш код якщо помилка виконання
}

Примітка: Також можна використуовувати INSERT INTO та DELETE запити.

Для виконання збережених запитів в БД INSERT INTO, UPDATE, DELETE слід використовувати метод PasteProcedure який приймає як аргумент назву запиту який слід виконати.

Екранування даних:

Для коректної роботи із текстовими рядками, в базі даних, їх потрібно екранувати, так як деякі символи можуть бути зарезервовані як системні.

В Access таким зареєстрованим символом являється - '

Тому для уникнення помилок використаємо метод ScreeningData

string text1 = "комп'ютер";
if (db.InsertData("UPDATE t1 SET value1='" + text1 + "'"))
{
	//даний запит не буде виконуватись
}
if (db.InsertData("UPDATE t1 SET value1='" + db.ScreeningData(text1) + "'"))
{
	//даний запит відпрацює правильно і в поле value1 беде додано текст: комп'ютер
}

view302like0dislike0 avatard_l4w clock 2017-11-10 03:02

Коментарі:



Для даної статті відсутні коментарі

Про нас

"Programmers World" розроблено з метою полегшення в освоєнні навичок програмування, та поширення матеріалів з сфери ІТ Українською мовою.

Кожен бажаючий може безкоштовно користуватися ресурсами сайту, щоб:

- Вивчати теоретичні аспекти мов програмування

- Переглядати практичне застосування теорії при виконанні різних міні проектів з відкритим кодом

- Розміщати свої завдання на форумі для допомоги в їх реалізації, або готового коду який може бути корисний іншим користувачам

- Спілкуватись з іншими користувачами та обмінюватись досвідом

Сайт функціонує на безопланій основі та ентузіазмі розробника, якщо Ви бажаєте долучитись до розвитку даного проекту то можете пожертвувати кошти на рахунки розміщені в блоці "Допомога сайту".

Сайт

Зареєстровані користувачі можуть скористатися системою діалогів, в профілі користувача, для отримання потрібної інформації. Написати!

Також Ви можете використати форми відправки Зауважень та Пропозицій.


Електронна пошта

Ви можете звертатись на нашу поштову скриньку site.programmersworld@gmail.com

www.000webhost.com