Матеріали сайту
Зараз обговорюють
Спасибі дуже корисна стаття
А ще щось планується подібного найближчим часом?
Дякую за підтримку, радий що Вам сподобалось!
Так маю вже майже дороблений проект по управлінні Audio файлом, на заміну стандартним клавішам управління HTML5, але ще не встиг відтестувати програвання файлів з інтернету, поки лише локально працює
Надіюсь найближчим часом дороблю й закину

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

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 беде додано текст: комп'ютер }
Попередня стаття: Робота із архіватором 7z. Архівування, розпакування файлів, та задання пароля | Наступна стаття: Колекції (Collections) |
Про нас
"Programmers World" розроблено з метою полегшення в освоєнні навичок програмування, та поширення матеріалів з сфери ІТ Українською мовою.
Кожен бажаючий може безкоштовно користуватися ресурсами сайту, щоб:
- Вивчати теоретичні аспекти мов програмування
- Переглядати практичне застосування теорії при виконанні різних міні проектів з відкритим кодом
- Розміщати свої завдання на форумі для допомоги в їх реалізації, або готового коду який може бути корисний іншим користувачам
- Спілкуватись з іншими користувачами та обмінюватись досвідом
Сайт функціонує на безопланій основі та ентузіазмі розробника, якщо Ви бажаєте долучитись до розвитку даного проекту то можете пожертвувати кошти на рахунки розміщені в блоці "Допомога сайту".
Сайт
Зареєстровані користувачі можуть скористатися системою діалогів, в профілі користувача, для отримання потрібної інформації. Написати!
Також Ви можете використати форми відправки Зауважень та Пропозицій.
Електронна пошта
Ви можете звертатись на нашу поштову скриньку site.programmersworld@gmail.com
Коментарі:
Для даної статті відсутні коментарі