Файл: Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 960
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Глава 14. Типичные Web-ориентированные приложения ASP.NET на Visual С# 2010
Пример 102. Чтение/запись текстового файла Web-приложением
Активная Web-страница может сохранять, а также читать данные на диске в каких-либо файлах, в том числе текстовых. Принцип чтения/записи на диск текстовых файлов такой же как и в Windows-приложениях, однако есть некоторые особенности. Поставим задачу написать Web-приложение, читающее текстовый файл и выводящее его в текстовое поле, пользователь имеет возможность редактировать текст и сохранять его в том же файле.
Для решения поставленной задачи запустим Visual Studio 2010, закажем новый проект из шаблона Empty ASP.NET Web Application, имя Web-приложения — RW_txt. К текущему проекту добавим Web-форму. Для этого в пункте меню Project выберем команду Add New Item и в появившемся окне дважды щелкнем на шаблоне Web Form.
В конструкторе формы из раздела Standard панели Toolbox перетащим мышью текстовое поле TextBox и две командных кнопки Button. Расположим их на форме так, как показано на рис. 14.1. Содержимое файла программной поддержки приведено в листинге 14.1.
Листинг 14.1. Чтение/запись текстового файла
// Чтение/запись текстового файла Web-приложением. Web-приложение читает текстовый файл в текстовое
//поле, а пользователь имеет возможность редактировать текст и сохранять его в том же файле
using System;
using System.Web.Ul.WebControls;
//Другие директивы using удалены, поскольку они не используются в данной программе
namespace RW_txt
{
public partial class WebForml : System.Web.UI.Page
{
string filename; // - имя файла используется в обеих процедурах
// Чтобы русские буквы читались корректно, объявляем объект КОДИРОВКА
System.Text.Encoding КОДИРОВКА = System.Text.Encoding.GetEncoding(1251);
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Здесь кодировка Win1251";
Button1.Text = "Читать"; Button2.Text = "Сохранить";
Button1.Focus();
// Разрешаем многострочие
TextBox1.TextMode = TextBoxMode.MultiLine;
filename = Request.PhysicalApplicationPath + "txt.txt";
}
protected void Button1_Click(object sender, EventArgs e)
{ // Чтение файла:
try
{ // Создаем экземпляр StreamReader для чтения из файла
var ЧИТАТЕЛЬ = new System.10.StreamReader(filename, КОДИРОВКА);
TextBox1. Text = ЧИТАТЕЛЬ. ReadToEnd ();
ЧИТАТЕЛЬ.Close();
}
catch (System.IO.FileNotFoundException Ситуация)
{
Response.Write("Нет такого файла
" + Ситуация.Message);
}
catch (Exception Ситуация) // Отчет о других ошибках
{
Response.Write("Ошибка чтения файла
" + Ситуация.Message + "
");
}
}
protected void Button2_Click(object sender, EventArgs e)
{ // Сохранение файла:
try
{ // Создание экземпляра StreamWriter для записи в файл
var ПИСАТЕЛЬ = new System.IO.StreamWriter(filename, false, КОДИРОВКА);
ПИСАТЕЛЬ.Write(TextBox1.Text);
ПИСАТЕЛЬ.Close();
}
catch (Exception Ситуация)
{ // Отчет обо всех возможных ошибках
Response.Write("Ошибка записи файла <Ьг />" + Ситуация.Message + "
");
}
}
}
}
Рис. 14.1. Форма приложения в режиме конструктора
В начале программного кода объявляем имя файла filename и объект кодировка в качестве внешних переменных по отношению к процедурам класса, чтобы они были видны из всех процедур обработки событий. При загрузке страницы Page_Load задаем надписи на кнопках Button1 и Button2, а текстовое поле переводим в режим Multiline, т. е. разрешаем размещать текст на нескольких строчках. Далее, поскольку мы не можем разрешить пользователю выбирать папку на удаленном сервере для размещения файла, в качестве такой папки указываем папку, где расположено текущее Web-приложение. При этом мы не сможем воспользоваться методом GetCurrentDirectory класса IO.Directory, поскольку эта функция нам укажет на системную папку C:\Windows\system32. Поэтому воспользуемся методом РhysicalApplicationPath объекта Request. При обработке события "щелчок на кнопке" Читать читаем текстовый файл, используя объект StreamReader. Так же как и при записи файла, данная процедура ничем не отличается от программирования ее в Windows-приложении.
Однако существует большая вероятность получить отказ в доступе к файлу. Операционная система, в зависимости от настроек, может выдать сообщение об ошибке сервера в вашем приложении вследствие отказа в доступе к вашему текстовому файлу. То есть можем получить запрет на запись файла на диск сервера. В этом сообщении об ошибке указано, что следует на вкладке Безопасность свойств текстового файла разрешить чтение/запись. Однако весьма вероятна ситуация, когда, щелкнув правой кнопкой мыши на изображении файла txt.txt и выбрав команду Свойства, мы получим свойства файла в таком виде, как показано на рис. 14.2.
Рис. 14.2. Вкладки окна свойств файла
Как видно, в окне свойств файла txt.txt отсутствует вкладка Безопасность. Чтобы ее получить, следует в Проводнике выбрать пункт меню Сервис | Свойства папки и в появившемся окне на вкладке Вид снять флажок Использовать простой общий доступ к файлам. Далее— щелчок на кнопках Применить и ОК (рис. 14.3).
Рис. 14.3. Вкладки окна свойств папки
Рис. 14.4. Вкладка Безопасность окна свойств файла
Теперь опять перейдем к свойствам файла txt.txt. Вкладка Безопасность, как видно, уже появилась. На ней нажмем кнопку Добавить, перейдя таким образом в окно Выбор. Далее нажмем кнопки Дополнительно, Поиск и, выбрав в появившемся списке имя пользователя ASP.NET, щелкнем на кнопке ОК. Теперь на вкладке Свойства в строках Чтение и Запись установим флажок разрешения и нажмем кнопки Применить и ОК (рис. 14.4).
Теперь еще раз запустим Web-приложение и убедимся в его корректной работе. На рис. 14.5 показан фрагмент работы созданной Web-страницы.
Используя инструмент чтения/записи текстового файла, можно обмениваться данными между страницами Web-приложения, организовать форум на Web-сайте, гостевую книгу, счетчик посещений и проч.
Рис. 14.5. Фрагмент работы Web-страницы, осуществляющей чтение/запись текстового файла
Убедиться в работоспособности Web-страницы можно, открыв соответствую, решение в папке RW_txt.
Пример 103. Программирование счетчика посещений сайта с использованием базы данных и объекта Session
Поставим задачу создать счетчик посещения вашего сайта. Каждое посещение будем фиксировать в виде записи в базе данных MS Access. Чтобы читатель мог реально повторить описываемые действия, подробно их рассмотрим. Запустим офисное приложение MS Access, далее в меню Файл выберем команду Создать I Новая база данных, файл — Web.mdb. Затем создадим "шапку" новой таблицы в ме конструктора. Имена полей и типы данных приведены на рис. 14.6.
Рис. 14.6. Проектирование полей таблицы базы данных
Как видно, автор не предусмотрел поля типа Счетчик, а ведь нам нужно считать именно количество посещений, т. е. количество записей. Сделано это сознательно, т. к. количество записей в базе данных выяснить очень просто, например, с помощью SQL-запроса:
SELECТ COUNT(*) FROM [Таблица посещений Web-страницы]
Tеперь запустим Visual Studio 2010, закажем новый проект из шаблона Empty NET Web Application C#, назовем его Counter. К текущему проекту добавим форму. Для этого в пункте меню Project выберем команду Add New Item и в появившемся окне дважды щелкнем по шаблону Web Form.
Здесь из раздела Standard панели Toolbox перенесем на Web-форму метку Label, куда будем выводить количество посещений данной страницы. Метку Label разместим пока в самом верху формы, но, в конце концов, ее следует расположить скромно где-нибудь в самом низу страницы.
Содержимое файла программной поддержки WebForm1.aspx.cs приведено в листинге 14.2.
Листинг 14.2. Счетчик посещений сайта
//Web-приложение, реализующее счетчик посещений сайта с использованием
// базы данных и объекта Session
using System;
// добавляем эту директиву для краткости выражений:
using ОлеДиБи = System.Data.OleDb;
//Другие директивы using удалены, поскольку они не используются в данной программе
namespace Counter
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Счетчик посещений сайта";
if (Page.IsPostBack == true) return;
// При первой загрузке страницы выясняем IP-адрес посетителя сайта string IР_адрес = Request.UserHostAddress;
string URL_aдpec;
try
{ // Определение, с какой Web-страницы вы сюда пришли
URL_aflpec = Request.UrlReferrer. AbsoluteUri;
Response.Write("
Вы пришли на эту" + " страницу со страницы " + URL_адрес) ;
}
catch // (System.NullReferenceException Ситуация)
{ // Если пришли на эту страницу, набрав URL-адрес
//в адресной строке браузера
URL_адрес = "Адресная строка браузера";
Response.Write("
Вы пришли на эту " + "страницу набрав URL-адрес в адресной строке");
}
Response.Write("
Вы пришли на эту страницу " + "с IP-адреса " + 1Р_адрес);
// МАНИПУЛЯЦИИ С БД О ПОСЕЩЕНИИ ПОЛЬЗОВАТЕЛЯ.
// Строка подключения
string СтрокаПодкл = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPathCWeb.mdb") ;
// Создание экземпляра объекта Connection
var Подключение = new ОлеДиБи.OIеDbСоnnection(СтрокаПодкл);
try
{ // Открытие подключения
Подключение.Open();
}
catch (Exception Ситуация)
{
Response.Write("
" + Ситуация.Message);
}
string SQL_3anpoc;
var Команда = new ОлеДиБи.OleDbCommand();
// ЕСЛИ ОБ ЭТОМ ПОСЕЩЕНИИ ЕЩЕ НЕТ ЗАПИСИ
if (Page.Session["ЕСТЬ ЛИ ЗАПИСЬ ОБ ЭТОМ ПОСЕЩЕНИИ?"] != "ДА")
{ // ДОБАВЛЕНИЕ ЗАПИСИ В БД О ПОСЕЩЕНИИ
string ДАТА = System.DateTime.Now.ToString();
// Строка SQL-запроса
SQL_3anpoc = "INSERT INTO [Таблица посещений Web-страницы] " +
"([Дата посещения], [IP-адрес посетителя], " + "[С какой страницы пришли]) VALUES ('" + ДАТА +
" ', ' " + IР_адрес + " ', " +URL_адрес + " ') ";
// Создание объекта Command с заданием SQL-запроса
Команда.CommandText = SQL_3anpoc;
// Для добавления записи эта команда обязательна
Команда.Connection = Подключение;
try
{ // Выполнение команды SQL, т. е/ ЗАПИСЬ В БД
Команда.ExecuteNonQuery ();
Response.Write( "
В таблицу БД посещений добавлена запись");
// ТЕПЕРЬ ПОЯВИЛАСЬ ЗАПИСЬ ОБ ЭТОМ ПОСЕЩЕНИИ
Page.Session["ЕСТЬ ЛИ ЗАПИСЬ ОБ ЭТОМ ПОСЕЩЕНИИ?"] = "ДА";
}
catch (Exception Ситуация)
{
Response.Write("
" + Ситуация.Message) ;
}
}
// ОПРЕДЕЛЕНИЕ КОЛИЧЕСТВА ЗАПИСЕЙ О ПОСЕЩЕНИИ.
// Новый SQL-запрос - это одна ячейка в новой таблице
SQL_3anpoc = "SELECT COUNT(*) FROM [Таб" + "лица посещений Web-страницы]";
Команда.CommandText = SQL_3anpoc;
Команда.Connection = Подключение;
// ExecuteScalar выполняет запрос и возвращает первую
// колонку первого ряда таблицы запроса
int КОЛ_ВО = 0;
try
{
КОЛ_ВО = (int)Команда.ExecuteScalar();
}
catch (Exception Ситуация)
{
Response. Write ("
" + Ситуация .Message) ;
}
Подключение.Close() ;
Label1.Text = "Количество посещений страницы = " + К0Л_В0;
}
}
}
Как видно из программного кода, программирование счетчика посещений реализовано при обработке событий загрузки Web-страницы Page_Load, причем при ее первой загрузке, когда IsPostBack = false. Используя объект Request, выясняем IP-адрес посетителя данной Web-страницы. Далее с помощью этого же объекта Request в блоке try.. .catch определяем, с какой Web-страницы пользователь перешел на данную страницу. Если попытка (try) определить оказалась неудачной, то управление переходит на Exception и делается вывод, что пользователь оказался на данной странице, набрав URL-адрес в адресной строке своего браузера. Для вывода текста в форму использован метод Response .Write. Роль этой печати здесь вспомагательная, как бы отладочная. Читатель может ее закомментировать или вовсе удалить.
Пример 102. Чтение/запись текстового файла Web-приложением
Активная Web-страница может сохранять, а также читать данные на диске в каких-либо файлах, в том числе текстовых. Принцип чтения/записи на диск текстовых файлов такой же как и в Windows-приложениях, однако есть некоторые особенности. Поставим задачу написать Web-приложение, читающее текстовый файл и выводящее его в текстовое поле, пользователь имеет возможность редактировать текст и сохранять его в том же файле.
Для решения поставленной задачи запустим Visual Studio 2010, закажем новый проект из шаблона Empty ASP.NET Web Application, имя Web-приложения — RW_txt. К текущему проекту добавим Web-форму. Для этого в пункте меню Project выберем команду Add New Item и в появившемся окне дважды щелкнем на шаблоне Web Form.
В конструкторе формы из раздела Standard панели Toolbox перетащим мышью текстовое поле TextBox и две командных кнопки Button. Расположим их на форме так, как показано на рис. 14.1. Содержимое файла программной поддержки приведено в листинге 14.1.
Листинг 14.1. Чтение/запись текстового файла
// Чтение/запись текстового файла Web-приложением. Web-приложение читает текстовый файл в текстовое
//поле, а пользователь имеет возможность редактировать текст и сохранять его в том же файле
using System;
using System.Web.Ul.WebControls;
//Другие директивы using удалены, поскольку они не используются в данной программе
namespace RW_txt
{
public partial class WebForml : System.Web.UI.Page
{
string filename; // - имя файла используется в обеих процедурах
// Чтобы русские буквы читались корректно, объявляем объект КОДИРОВКА
System.Text.Encoding КОДИРОВКА = System.Text.Encoding.GetEncoding(1251);
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Здесь кодировка Win1251";
Button1.Text = "Читать"; Button2.Text = "Сохранить";
Button1.Focus();
// Разрешаем многострочие
TextBox1.TextMode = TextBoxMode.MultiLine;
filename = Request.PhysicalApplicationPath + "txt.txt";
}
protected void Button1_Click(object sender, EventArgs e)
{ // Чтение файла:
try
{ // Создаем экземпляр StreamReader для чтения из файла
var ЧИТАТЕЛЬ = new System.10.StreamReader(filename, КОДИРОВКА);
TextBox1. Text = ЧИТАТЕЛЬ. ReadToEnd ();
ЧИТАТЕЛЬ.Close();
}
catch (System.IO.FileNotFoundException Ситуация)
{
Response.Write("Нет такого файла
" + Ситуация.Message);
}
catch (Exception Ситуация) // Отчет о других ошибках
{
Response.Write("Ошибка чтения файла
" + Ситуация.Message + "
");
}
}
protected void Button2_Click(object sender, EventArgs e)
{ // Сохранение файла:
try
{ // Создание экземпляра StreamWriter для записи в файл
var ПИСАТЕЛЬ = new System.IO.StreamWriter(filename, false, КОДИРОВКА);
ПИСАТЕЛЬ.Write(TextBox1.Text);
ПИСАТЕЛЬ.Close();
}
catch (Exception Ситуация)
{ // Отчет обо всех возможных ошибках
Response.Write("Ошибка записи файла <Ьг />" + Ситуация.Message + "
");
}
}
}
}
Рис. 14.1. Форма приложения в режиме конструктора
В начале программного кода объявляем имя файла filename и объект кодировка в качестве внешних переменных по отношению к процедурам класса, чтобы они были видны из всех процедур обработки событий. При загрузке страницы Page_Load задаем надписи на кнопках Button1 и Button2, а текстовое поле переводим в режим Multiline, т. е. разрешаем размещать текст на нескольких строчках. Далее, поскольку мы не можем разрешить пользователю выбирать папку на удаленном сервере для размещения файла, в качестве такой папки указываем папку, где расположено текущее Web-приложение. При этом мы не сможем воспользоваться методом GetCurrentDirectory класса IO.Directory, поскольку эта функция нам укажет на системную папку C:\Windows\system32. Поэтому воспользуемся методом РhysicalApplicationPath объекта Request. При обработке события "щелчок на кнопке" Читать читаем текстовый файл, используя объект StreamReader. Так же как и при записи файла, данная процедура ничем не отличается от программирования ее в Windows-приложении.
Однако существует большая вероятность получить отказ в доступе к файлу. Операционная система, в зависимости от настроек, может выдать сообщение об ошибке сервера в вашем приложении вследствие отказа в доступе к вашему текстовому файлу. То есть можем получить запрет на запись файла на диск сервера. В этом сообщении об ошибке указано, что следует на вкладке Безопасность свойств текстового файла разрешить чтение/запись. Однако весьма вероятна ситуация, когда, щелкнув правой кнопкой мыши на изображении файла txt.txt и выбрав команду Свойства, мы получим свойства файла в таком виде, как показано на рис. 14.2.
Рис. 14.2. Вкладки окна свойств файла
Как видно, в окне свойств файла txt.txt отсутствует вкладка Безопасность. Чтобы ее получить, следует в Проводнике выбрать пункт меню Сервис | Свойства папки и в появившемся окне на вкладке Вид снять флажок Использовать простой общий доступ к файлам. Далее— щелчок на кнопках Применить и ОК (рис. 14.3).
Рис. 14.3. Вкладки окна свойств папки
Рис. 14.4. Вкладка Безопасность окна свойств файла
Теперь опять перейдем к свойствам файла txt.txt. Вкладка Безопасность, как видно, уже появилась. На ней нажмем кнопку Добавить, перейдя таким образом в окно Выбор. Далее нажмем кнопки Дополнительно, Поиск и, выбрав в появившемся списке имя пользователя ASP.NET, щелкнем на кнопке ОК. Теперь на вкладке Свойства в строках Чтение и Запись установим флажок разрешения и нажмем кнопки Применить и ОК (рис. 14.4).
Теперь еще раз запустим Web-приложение и убедимся в его корректной работе. На рис. 14.5 показан фрагмент работы созданной Web-страницы.
Используя инструмент чтения/записи текстового файла, можно обмениваться данными между страницами Web-приложения, организовать форум на Web-сайте, гостевую книгу, счетчик посещений и проч.
Рис. 14.5. Фрагмент работы Web-страницы, осуществляющей чтение/запись текстового файла
Убедиться в работоспособности Web-страницы можно, открыв соответствую, решение в папке RW_txt.
Пример 103. Программирование счетчика посещений сайта с использованием базы данных и объекта Session
Поставим задачу создать счетчик посещения вашего сайта. Каждое посещение будем фиксировать в виде записи в базе данных MS Access. Чтобы читатель мог реально повторить описываемые действия, подробно их рассмотрим. Запустим офисное приложение MS Access, далее в меню Файл выберем команду Создать I Новая база данных, файл — Web.mdb. Затем создадим "шапку" новой таблицы в ме конструктора. Имена полей и типы данных приведены на рис. 14.6.
Рис. 14.6. Проектирование полей таблицы базы данных
Как видно, автор не предусмотрел поля типа Счетчик, а ведь нам нужно считать именно количество посещений, т. е. количество записей. Сделано это сознательно, т. к. количество записей в базе данных выяснить очень просто, например, с помощью SQL-запроса:
SELECТ COUNT(*) FROM [Таблица посещений Web-страницы]
Tеперь запустим Visual Studio 2010, закажем новый проект из шаблона Empty NET Web Application C#, назовем его Counter. К текущему проекту добавим форму. Для этого в пункте меню Project выберем команду Add New Item и в появившемся окне дважды щелкнем по шаблону Web Form.
Здесь из раздела Standard панели Toolbox перенесем на Web-форму метку Label, куда будем выводить количество посещений данной страницы. Метку Label разместим пока в самом верху формы, но, в конце концов, ее следует расположить скромно где-нибудь в самом низу страницы.
Содержимое файла программной поддержки WebForm1.aspx.cs приведено в листинге 14.2.
Листинг 14.2. Счетчик посещений сайта
//Web-приложение, реализующее счетчик посещений сайта с использованием
// базы данных и объекта Session
using System;
// добавляем эту директиву для краткости выражений:
using ОлеДиБи = System.Data.OleDb;
//Другие директивы using удалены, поскольку они не используются в данной программе
namespace Counter
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Счетчик посещений сайта";
if (Page.IsPostBack == true) return;
// При первой загрузке страницы выясняем IP-адрес посетителя сайта string IР_адрес = Request.UserHostAddress;
string URL_aдpec;
try
{ // Определение, с какой Web-страницы вы сюда пришли
URL_aflpec = Request.UrlReferrer. AbsoluteUri;
Response.Write("
Вы пришли на эту" + " страницу со страницы " + URL_адрес) ;
}
catch // (System.NullReferenceException Ситуация)
{ // Если пришли на эту страницу, набрав URL-адрес
//в адресной строке браузера
URL_адрес = "Адресная строка браузера";
Response.Write("
Вы пришли на эту " + "страницу набрав URL-адрес в адресной строке");
}
Response.Write("
Вы пришли на эту страницу " + "с IP-адреса " + 1Р_адрес);
// МАНИПУЛЯЦИИ С БД О ПОСЕЩЕНИИ ПОЛЬЗОВАТЕЛЯ.
// Строка подключения
string СтрокаПодкл = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPathCWeb.mdb") ;
// Создание экземпляра объекта Connection
var Подключение = new ОлеДиБи.OIеDbСоnnection(СтрокаПодкл);
try
{ // Открытие подключения
Подключение.Open();
}
catch (Exception Ситуация)
{
Response.Write("
" + Ситуация.Message);
}
string SQL_3anpoc;
var Команда = new ОлеДиБи.OleDbCommand();
// ЕСЛИ ОБ ЭТОМ ПОСЕЩЕНИИ ЕЩЕ НЕТ ЗАПИСИ
if (Page.Session["ЕСТЬ ЛИ ЗАПИСЬ ОБ ЭТОМ ПОСЕЩЕНИИ?"] != "ДА")
{ // ДОБАВЛЕНИЕ ЗАПИСИ В БД О ПОСЕЩЕНИИ
string ДАТА = System.DateTime.Now.ToString();
// Строка SQL-запроса
SQL_3anpoc = "INSERT INTO [Таблица посещений Web-страницы] " +
"([Дата посещения], [IP-адрес посетителя], " + "[С какой страницы пришли]) VALUES ('" + ДАТА +
" ', ' " + IР_адрес + " ', " +URL_адрес + " ') ";
// Создание объекта Command с заданием SQL-запроса
Команда.CommandText = SQL_3anpoc;
// Для добавления записи эта команда обязательна
Команда.Connection = Подключение;
try
{ // Выполнение команды SQL, т. е/ ЗАПИСЬ В БД
Команда.ExecuteNonQuery ();
Response.Write( "
В таблицу БД посещений добавлена запись");
// ТЕПЕРЬ ПОЯВИЛАСЬ ЗАПИСЬ ОБ ЭТОМ ПОСЕЩЕНИИ
Page.Session["ЕСТЬ ЛИ ЗАПИСЬ ОБ ЭТОМ ПОСЕЩЕНИИ?"] = "ДА";
}
catch (Exception Ситуация)
{
Response.Write("
" + Ситуация.Message) ;
}
}
// ОПРЕДЕЛЕНИЕ КОЛИЧЕСТВА ЗАПИСЕЙ О ПОСЕЩЕНИИ.
// Новый SQL-запрос - это одна ячейка в новой таблице
SQL_3anpoc = "SELECT COUNT(*) FROM [Таб" + "лица посещений Web-страницы]";
Команда.CommandText = SQL_3anpoc;
Команда.Connection = Подключение;
// ExecuteScalar выполняет запрос и возвращает первую
// колонку первого ряда таблицы запроса
int КОЛ_ВО = 0;
try
{
КОЛ_ВО = (int)Команда.ExecuteScalar();
}
catch (Exception Ситуация)
{
Response. Write ("
" + Ситуация .Message) ;
}
Подключение.Close() ;
Label1.Text = "Количество посещений страницы = " + К0Л_В0;
}
}
}
Как видно из программного кода, программирование счетчика посещений реализовано при обработке событий загрузки Web-страницы Page_Load, причем при ее первой загрузке, когда IsPostBack = false. Используя объект Request, выясняем IP-адрес посетителя данной Web-страницы. Далее с помощью этого же объекта Request в блоке try.. .catch определяем, с какой Web-страницы пользователь перешел на данную страницу. Если попытка (try) определить оказалась неудачной, то управление переходит на Exception и делается вывод, что пользователь оказался на данной странице, набрав URL-адрес в адресной строке своего браузера. Для вывода текста в форму использован метод Response .Write. Роль этой печати здесь вспомагательная, как бы отладочная. Читатель может ее закомментировать или вовсе удалить.