Опубликован: 07.05.2010 | Доступ: свободный | Студентов: 1678 / 62 | Оценка: 4.56 / 4.06 | Длительность: 34:11:00
Лекция 11:

Основы 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>
  • Выполните страницу, результат должен быть прежним