VisualBasic.NET -> Работа с БД

Автор: StormBreaker
Предишни уроци:
Цикли и масиви
GUI и събития
Класове и модули
Въведение
Методите за работа с бази от данни в VB са повече от един, но аз ще ви запозная с най-лесния и разбираем, който е много подобен на този, който всички използваме в PHP. Също така за да работите с различните видове SQL системи (MySQL, MsSQL…) и AccessDB няма нужда да ползвате различни методи, защото единствената разлика е в така нареченият connection string и в името на класа, който ще ползваме.
Защо ни е AccessDB? Защото е най-лесно да се ползва, когато ни трябва БД само в рамките на определената програма. Така тя ще работи без нужда от Mysql сървър или интернет.
Connection string
Така се нарича текстът, който се използва при свързване с определена БД. В него, подобно на SQL стринг, се задават параметри като име, парола, сървър адрес, порт, име на базата и т.н.
MySQL допълнителни библиотеки
Тъй като Visual Studio по подразбиране не съдържа необходимите библиотеки за свързване с Mysql сървър трябва да си инсталираме една добавка.
MySQL Connector .NET
Няма нищо сложно – теглите и инсталирате. По време на и след инсталацията няма нужда от никакви настройки. Единствено трябва да се окаже на Visual Studio да добави новите библиотеки в проекта. Това става ето така:

Свързване
При работа с БД в VB имаме променлива, която съдържа връзката с БД.Ще я наречем connection. Като параметър се подава connection string за дадения вид SQL система.
За mysql
Public connection As New MySqlConnection("SERVER=localhost;DATABASE=test;UID=root;PWD=parola;PORT=3306")
За да не пиша всеки път MySql.Data.MySqlClient всеки път преди MySqlConnection и другите класове, най-горе преди Public Class Form1 добавям един ред
Imports MySql.Data.MySqlClientТова вкарва всички класове от MySql.Data.MySqlClient за директен достъп.
Кодът по-горе само декларира променливата, но не се свързва с БД. За да се свърже трябва да използваме метода
connection.Open()например при зареждането на програмата.
За AccessDB
Public AccessConnection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Persist Security Info=False;")Това важи за БД, създадени с Access 2007. При Data Source се оказва пътя до файла.
Тук също съм направил един импорт
Imports System.Data.OleDbИ при стартиране на програмата също трябва да отворим връзката:
AccessConnection.Open()От тук нататък всичко е едно и също. Само имената на класовете се различават:
MySqlConnection <–> OleDbConnection
MySqlDataReader <–> OleDbDataReader
MySqlCommand <–> OleDbCommand
В останалата част от урока ще пиша примерите за AccessDB, но вие лесно можете да смените имената на класовете и да ползвате mysql.
Изпълняване на заявки
Ще се занимаем с 2 вида заявки – такива, които връщат в резултат редове от таблица (SELECT…) и такива, които не връщат резултат (UPDATE, INSERT, DELETE…)
Декларация на променливата за заявката:
Dim query As New OleDbCommand("INSERT INTO ...", AccessConnection)Първият параметър е самата заявка като стринг, а вторият е връзката към БД.
Сега за да изпълним заявката имаме 2 варианта.
За да изпълним заявка, без да използваме върнати редове (ако има) ползваме
query.ExecuteNonQuery()тази функция връща само броя на променени/добавени/изтрити редове от заявката.
Четене на върнати редове
За да можем да прочетем върнатите редове от заявката трябва да декларираме още една променлива:
Dim reader As OleDbDataReaderсега трябва да присвоим на този DataReader върнатото от заявката, като вече използваме ExecuteReader() вместо ExecuteNonQuery()
reader = query.ExecuteReader()И сега цикълът за четене на резултатите:
While reader.Read()
... Изпълнява се за всеки ред ...
End WhileВътре в цикъла полетата от резултата се четат така:
reader.Item("ime_na_poleto")като върнатата от функцията стойност е тази от съответното поле в съответния ред.
Затваряне на четеца
След като свършите с цикъла за взимане на информацията задължително трябва да затворите datareadera
reader.Close()Ако не го затворите при следващата заявка програмата ще ви изведе грешка.
Затваряне на връзката
Връзката обикновено се затваря в края на програмата без да има нужда вие да я затваряте ръчно, но ако ви се наложи можете да го направите така:
AccessConnection.Close()По-долу във видеото ще демонстрирам свързване с Access база данни, като ще си направим готварска книга.



