Добавить Автора
Домашняя страница: http://www.amuhouse.com
Электронная почта: [email protected]
Отказ от ответственности: Это оригинальная работа автора. При перепечатке указывайте источник.
ASP.NET обычно использует SQL Server в качестве внутренней базы данных. Как правило, примеры программ работы с базой данных ASP.NET используют отдельный доступ к данным, что означает, что на каждой странице пишется код для подключения к базе данных, доступа к данным и закрытия базы данных. У этого метода есть некоторые недостатки. Один из них заключается в том, что если ваша база данных изменится, вам придется менять код подключения к базе данных страница за страницей.
Второй недостаток — избыточность кода. Много кода повторяется и ненужно.
Поэтому я попытался реализовать доступ к данным типа ASP.NET через согласованный класс операций с базой данных.
В качестве примера возьмем систему выпуска новостей, которую можно найти на обычных веб-сайтах. Для нее требуется база данных статей. Мы назовем эту базу данных News_Articles. Система выпуска новостей предполагает публикацию новостей, отображение статей, управление статьями и т. д.
У статьи обычно есть название, автор, время публикации, содержание, и нам необходимо их пронумеровать. Мы пишем его как класс под названием Article class, код следующий:
//Article.cs
используя пространство
имен News_Articles.Data
;
{
/// <сводка>
/// Краткое описание статьи.
/// </сводка>
Публичный класс Статья
{
частный int _id; //номер статьи;
частная строка _author; //Автор статьи;
частная строка _topic //Название статьи;
Private DateTime _postTime //Время публикации статьи;
Private string _content //Содержимое статьи
public int ID;
{
получить {вернуть _id;}
установить { _id = значение;}
}
публичная строка Автор
{
получить {вернуть _автор};
установить { _author = значение }
}
публичная строка Тема
{
получить {вернуть _topic;
установить {_topic = значение};
}
общедоступная строка Содержимое
{
получить {вернуть _контент;
установить {_content = значение};
}
публичный DateTime PostTime
{
получить {вернуться _postTime;
установить { _postTime = значение};
}
}
}
Затем мы пишем класс коллекции статей ArticleCollection.
Код выглядит следующим образом
Программный код
//ArticleCollection.cs
используя систему[color=#0000ff];
используя пространство имен System.Collections
News_Articles.Data
;
{
/// <сводка>
/// Класс коллекции статей, унаследованный от ArrayList
/// </сводка>
публичный класс ArticleCollection: ArrayList
{
публичная ArticleCollection() : base()
{
}
Public ArticleCollection(ICollection c): base(c)
{
}
}
}[/цвет]
Этот класс эквивалентен DataSet в ASP.NET (на самом деле они очень разные). Его основная цель — собрать множество статей, чтобы DataGrid или DataList можно было использовать в качестве источника данных в ASP.NET. Страница Показать статью.
Теперь мы можем реализовать операцию с базой данных News_Articles. Как я уже сказал, это класс операции с базой данных. С таким же успехом можно было бы назвать его ArticleDb. Реализация следующая:
Программный код
//ArticleDb.cs
использование системы;
использование System.Configuration;
использование System.Data;
используя пространство имен System.Data.SqlClient
News_Articles.Data
;
{
/**//// <сводка>
/// Класс операции с базой данных, реализующий чтение, вставку, обновление и удаление базы данных статей
/// </сводка>
публичный класс ArticleDb
{
Private SqlConnection _conn //подключение к базе данных SQL Server;
частная строка _articledb = "News_Articles" // таблица базы данных статей SQL Server;
/**//// <сводка>
///Инициализация класса, настройка подключения к базе данных
/// </сводка>
публичная статьяБД()
{
_conn = новый SqlConnection(ConfigurationSettings.AppSettings["connectionString"]);
}
/**//// <сводка>
/// Открытие соединения с базой данных
/// </сводка>
публичная недействительность Открыть()
{
if(_conn.State == ConnectionState.Closed)
_conn.Открыть();
}
/**//// <сводка>
/// Закрываем соединение с базой данных
/// </сводка>
публичная недействительность Закрыть()
{
если(_conn.State == ConnectionState.Open)
_conn.Закрыть();
}
/**//// <сводка>
/// Прочитать все статьи в базе
/// </сводка>
/// <returns>ArticleCollection</returns>
общедоступная коллекция статей GetArticles()
{
ArticleCollection статей = новая ArticleCollection();
строка sql = «Выбрать * ИЗ» + _articledb;
SqlCommand cmd = новый SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
в то время как (доктор.Read())
{
Искусство статьи = PopulateArticle(dr);
статьи.Добавить(искусство);
}
доктор.Закрыть();
возврат статей;
}
/**//// <сводка>
/// По номеру статьи читаем статью в базе данных
/// </сводка>
/// <returns>Статья</return>
общедоступная статья GetArticle (intarticleId)
{
string sql = "Выбрать * FROM" + _articledb + "Where ID='" + ArticleId + "'";
SqlCommand cmd = новый SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
Статья статьи = PopulateArticle(dr);
доктор.Закрыть();
вернуть товар;
}
/**//// <сводка>
/// Обновляем записи базы данных, обратите внимание, что вам необходимо установить номер артикула
/// </сводка>
/// <param name="article"></param>
public void UpdateArticle (статья статьи)
{
string sql = "Обновить " + _articledb +" SET Topic=@topic,Author=@author,Content=@content,PostTime=@postTime "
+ "Где ID = @articleId";
SqlCommand cmd = новый SqlCommand(sql,_conn);
cmd.Parameters.Add("@articleId",SqlDbType.Int,4).Value = Article.ID;
cmd.Parameters.Add("@topic",SqlDbType.NVarChar,100).Value = Article.Topic;
cmd.Parameters.Add("@author",SqlDbType.NVarChar,100).Значение = статья.Автор;
cmd.Parameters.Add("@content",SqlDbType.NText).Value = Article.Content;
cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value = Article.PostTime;
cmd.ExecuteNonQuery()
}
;
/**//// <сводка>
/// Получаем статьи, опубликованные конкретным автором, в базе данных
/// </сводка>
/// <param name="author"></param>
/// <returns>ArticleCollection</returns>
public ArticleCollection GetArticlesByAuthor (строка автора)
{
строка sql = "Выбрать * ИЗ " + _articledb +" Где Автор='" + автор + "'";
SqlCommand cmd = new SqlCommand(sql, _conn);
ArticleCollection ArticleCollection = новый
SqlDataReader dr = cmd.ExecuteReader()
;
{
Статья a = PopulateArticle(dr);
статьяКоллекция.Добавить(а);
}
доктор.Закрыть();
вернуть статьюКоллекция;
}
/**//// <сводка>
/// Удалить статью с заданным номером
/// </сводка>
/// <param name="articleID"></param>
public void DeleteArticle (int ArticleID)
{
строка sql = «Удалить ИЗ» + _articledb + « Где ID = '» + идентификатор статьи + «'»;
SqlCommand cmd = новый SqlCommand (sql, _conn);
cmd.ExecuteNonQuery();
}
/**//// <сводка>
/// Генерируем объект статьи через SqlDataReader
/// </сводка>
/// <param name="dr"></param>
/// <возвращается></возвращается>
Частная статья PopulateArticle (SqlDataReader dr)
{
Искусство статьи = новая статья();
art.ID = Convert.ToInt32(dr["ID"]);
art.Author = Convert.ToString(dr["Автор"]);
art.Topic = Convert.ToString(dr["Тема"]);
art.Content = Convert.ToString(dr["Content"]);
art.PostTime = Convert.ToDateTime(dr["PostTime"]);
return art;
}
/**//// <сводка>
/// Добавляем статью в базу данных и возвращаем номер статьи
/// </сводка>
/// <param name="article"></param>
/// <returns>Номер только что вставленной статьи</returns>
public int AddPost (статья-статья)
{
string sql = "Вставить INTO " + _articledb +"(Автор,Тема,Содержание,PostTime)"+
"ЗНАЧЕНИЯ(@author, @topic, @content, @postTime) " +
"Выберите @postID = @@IDENTITY";
SqlCommand cmd = новый SqlCommand(sql,_conn);
cmd.Parameters.Add("@postID",SqlDbType.Int,4);
cmd.Parameters["@postID"].Direction = ПараметрDirection.Output;
cmd.Parameters.Add("@author",SqlDbType.NVarChar,100).Value = Article.Author;
cmd.Parameters.Add("@topic",SqlDbType.NVarChar,400).Value = Article.Topic;
cmd.Parameters.Add("@content",SqlDbType.Text).Value = статья.Content;
cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value =article.PostTime;
cmd.ExecuteNonQuery();
Article.ID = (int)cmd.Parameters["@postID"].Value;
вернуть статью.ID;
}
}
}
Базовый фреймворк уже готов. Если мы хотим отображать данные из базы данных статей News_Artices на странице ASP.NET, нам нужно всего лишь добавить DataGrid или DataList, а затем привязать источник данных. Например, добавьте DataGrid в Default.aspx, назовите его ArticlesDataGrid и добавьте
программный код
в фоновый код Default.aspx.cs.
использование News_Articles.Data;
И добавьте следующий код в Page_Load:
программный код
частная пустота Page_Load (отправитель объекта, System.EventArgs e)
{
// Размещаем здесь пользовательский код для инициализации страницы
ArticleDb myArticleDb = новая ArticleDb();
мояСтатьяДб.Открыть();
ArticleCollection статей = myArticleDb.GetArticles();
this.ArticlesDataGrid.DataSource = статьи;
если(!Page.IsPostBack)
{
this.ArticlesDataGrid.DataBind();
}
myArticleDb.Close();
}
Таким образом, можно прочитать все статьи в базе данных статей.
Если вам нужно удалить статью, добавьте следующий код:
Код программы
//Удалить статью с номером 1
myArticleDb.DeleteArticle(1);
Вставьте статью, код следующий:
программный код
//Вставка новой статьи без указания номера статьи. Номер статьи будет возвращен SQL Server после успешной вставки номера статьи.
Статья новаяСтатья = новая статья();
новаяСтатья.Автор = "Переместим";
newArticle.Topic = "Проверьте вставку новой статьи";
newArticle.Content = "Это содержание статьи, которую я написал";
новаяСтатья.PostTime = ДатаВремя.Сейчас;
intarticleId = myArticleDb.AddPost(newArticle);
Обновите статью, используя следующий код:
программный код
//Обновляем статью, обратите внимание, что нужно указать номер статьи
Обновление статьиСтатья = новая статья();
updateArticle.ID = 3; //Обратите внимание, что вам необходимо указать номер статьи.
updateArticle.Автор = "Переместим";
updateArticle.Topic = "Проверить данные обновления";
updateArticle.Content = "Это содержание статьи, которую я обновил";
updateArticle.PostTime = DateTime.Now;
myArticleDb.UpdateArticle(updateArticle);
Вышеупомянутое — это всего лишь основа, и существует множество деталей конкретной реализации, которые не указаны. Но на основе описанной выше структуры вам будет проще писать код для операций с базой данных. Другое предложение — написать приведенный выше оператор SQL для доступа к базе данных в виде хранимой процедуры базы данных, например, добавив статью:
Программный код
Создать ПРОЦЕДУРУ AddPost
(
@ID int ВЫХОД,
@Автор nvarchar(100),
@Topic nvarchar(100),
@Content текст,
@PostTime дата-время
)
КАК
Вставьте INTO News_Articles(Автор, Тема, Содержание, Время публикации) ЗНАЧЕНИЯ (@Author, @Topic, @Content, @PostTime);
Выберите @ID = @@IDENTITY.
ИДТИ
Приложение 1: Поля базы данных News_Articles
программного кода
определяет, может ли длина типа данных быть нулевой.
Идентификатор артикула int 4 нет
Название статьи темы nvarchar 100 нет
Автор авторnvarchar 100
Содержание статьи содержание ntext 16 Нет
Время публикации PostTime datetime 8 Нет
Значением PostTime по умолчанию может быть установлено значение (getutcdate()).
Оператор SQL —
Create TABLE [News_Articles] (
[ID] [int] ИДЕНТИЧНОСТЬ (1, 1) НЕ НУЛЬ,
[Тема] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL,
[Автор] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Содержимое] [ntext] COLLATE Chinese_PRC_CI_AS NOT NULL,
[PostTime] [datetime] NOT NULL CONSTRAINT [DF_News_Articles_PostTime] ПО УМОЛЧАНИЮ (getutcdate())
) НА [ПЕРВИЧНЫЙ] TEXTIMAGE_ON [ПЕРВИЧНЫЙ]
ИДТИ
Приложение 2: Описание исходного кода проекта News_Articles: Перед открытием файла проекта News_Articles.csproj необходимо задать виртуальный путь News_Articles или изменить настройки в News_Articles.csproj.webinfo. Для нормальной работы должен быть установлен SQL Server и установлена база данных статей News_Articles. В корневом каталоге исходного кода проекта находятся текстовые файлы SQL.