Основы ADO.NET
Подключение к БД и тестирование соединения
После установки SQL Server 2005 нужно убедиться, что служба SQLServerAgent включена в режим Auto. Это можно сделать через Пуск/Настройка/Панель управления/Администрирование/Службы
Приведем простой пример установки соединения с БД Northwind.
Способ 1
- Создайте командой Website/Add New Item новую страницу TestConnection.aspx без отдельного файла поддержки
- Переведите страницу в режим Design и добавьте из вкладки Standard элемент Label с именем lblInfo
-
В режиме Design двойным щелчком на клиентской области страницы создайте обработчик Page_Load() в блоке скриптов, который заполните так, чтобы общий код страницы был следующим
<%@ Page Language="C#" %> <script runat="server"> protected void Page_Load(object sender, EventArgs e) { string connectString = System.Web.Configuration.WebConfigurationManager. ConnectionStrings["Northwind"].ConnectionString; System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(connectString); try { con.Open(); lblInfo.Text = "<b>Версия сервера:</b> " + con.ServerVersion; lblInfo.Text += "<br /><b>Соединение:</b> " + con.State.ToString(); } catch(Exception err) { lblInfo.Text = "<b>Ошибка чтения базы данных.</b>"; lblInfo.Text += err.Message; } finally { con.Close(); lblInfo.Text += "<br /><b>Теперь соединение:</b> "; lblInfo.Text += con.State.ToString(); } } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="lblInfo" runat="server" Text="Label"></asp:Label></div> </form> </body> </html>
-
Поместите в файл web.config строку соединения следующим образом
<?xml version="1.0"?> <configuration> <connectionStrings> <add name="Northwind" connectionString = "Data Source=localhost; Initial Catalog=Northwind; user id=sa; password=;" /> </connectionStrings> <system.web> <compilation debug="true"/> </system.web> </configuration>
- Выполните страницу, сделав ее стартовой, результат должен быть примерно следующим
Соединение как объект занимает определенные ресурсы, поэтому открывать соединение нужно как можно позже, и освобождать как можно быстрее. В примере предусмотрен блок finally на тот случай, что даже при возникновении исключения соединение все равно будет закрыто. Если это не предусмотреть, то в случае необработанного исключения соединение останется открытым до тех пор, пока сборщик мусора не уничтожит объект con типа SqlConnection.
Способ 2
Другой подход гарантированного закрытия соединения - использовать блок using. Оператор using декларирует, что мы используем уничтожаемый объект в течение краткого периода времени. Как только выполнение блока using завершится, среда выполнения немедленно освободит соответствующий объект, вызвав метод Dispose(). Вызов этого метода эквивалентен вызову метода Close() для объекта Connection.
- Создайте копию страницы TestConnection.aspx и назначьте ей имя TestConnection1.aspx
-
Назначьте новую страницу стартовой и заполните ее следующим кодом
<%@ Page Language="C#" %> <script runat="server"> protected void Page_Load(object sender, EventArgs e) { string connectString = System.Web.Configuration.WebConfigurationManager. ConnectionStrings["Northwind"].ConnectionString; System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(connectString); using (con) { con.Open(); lblInfo.Text = "<b>Версия сервера:</b> " + con.ServerVersion; lblInfo.Text += "<br /><b>Соединение:</b> " + con.State.ToString(); } lblInfo.Text += "<br /><b>Теперь соединение:</b> "; lblInfo.Text += con.State.ToString(); } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="lblInfo" runat="server" Text="Label"></asp:Label></div> </form> </body> </html>
- Выполните страницу, результат должен быть прежним