VisualBasic.NET -> Работа с БД
10-11-2009
Предишни уроци:
Цикли и масиви
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 база данни, като ще си направим готварска книга.


/ Трябва да сте регистриран за да напишете коментар /
От: lord_simeon
14:12 01-05-2010
Доста труден начин за работа с БД по-лесно ще стане чрез използване на обекти :)
От: StormBreaker
14:47 01-05-2010
Но нямаш свободата да си съставиш сам заявката, което те орязва доста. Плюс това обекти много лесно можеш и тук да си ползваш.
От: AlexMartin
18:18 11-11-2010
Благодаря за урока, но ето какъв е проблемът при мен

Form1 - http://paste2.org/p/1084577

Dobavqne - http://paste2.org/p/1084578

И грешката е

No value given for one or more required parameters.

при

ExecuteReader

Благодаря..
От: erisii
16:31 13-06-2011
Благодаря за урока, но не мога да го пробвам :(
Нямам в Add Referense MySqlData, инсталирах всичко и го няма, защо?
От: erisii
8:51 21-06-2011
Heeeeeeeeelp !!!
От: StormBreaker
10:18 21-06-2011
Ако си инсталирал правилното нещо няма как да го няма.
От: erisii
12:18 30-06-2011
Инсталирах това: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=0A391ABD-25C1-4FC0-919F-B21F31AB88B7 и това: http://dev.mysql.com/downloads/connector/net/
Имам и VB5.0, друго трябва чи ми?
От: erisii
12:21 30-06-2011
Инсталирах това: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=0A391ABD-25C1-4FC0-919F-B21F31AB88B7 и това: http://dev.mysql.com/downloads/connector/net/
Имам и VB5.0, друго трябва чи ми? Сега виждам , че конектора е за 32-бита, а DotNet е за 64-бита ?????????
От: StormBreaker
13:02 30-06-2011
Какъв е този VB5.0 дето имаш? Това е за VB .NET (2008, 2010)
От: erisii
20:13 30-06-2011
Може ли линк на това което трябва да инсталирам?
От: StormBreaker
20:35 30-06-2011
http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-basic-express
От: Teodotko
19:13 23-02-2013
Много полезен урок :) Дали може да се преработи файла с базата данни да бъде на хостинг ?
От: StormBreaker
19:35 23-02-2013
@Teodotko няма какво да му преработваш - ползваш mysql библиотеката - обяснено е в урока
От: Teodotko
22:28 24-02-2013
Да, минути след като постнах се светнах :D
1