Auteur : Willmove
Page d'accueil : http://www.amuhouse.com
Courriel : [email protected]
Avertissement : Il s'agit de l'œuvre originale de l'auteur. Veuillez indiquer la source lors de la réimpression.
ASP.NET utilise généralement SQL Server comme base de données principale. Généralement, les exemples de programmes d'exploitation de base de données ASP.NET utilisent un accès aux données distinct, ce qui signifie que chaque page écrit du code pour se connecter à la base de données, accéder aux données et fermer la base de données. Cette méthode présente certains inconvénients. L'un d'entre eux est que si votre base de données change, vous devez modifier le code de connexion à la base de données page par page.
Le deuxième inconvénient est la redondance du code. Une grande partie du code est répétée et inutile.
Par conséquent, j'ai essayé d'implémenter l'accès aux données de type ASP.NET via une classe d'opérations de base de données cohérente.
Prenons comme exemple le système de communiqués de presse que l'on trouve sur les sites Web généralistes. Il nécessite une base de données d'articles. Nous nommons cette base de données News_Articles. Le système de diffusion d'actualités consiste à publier des actualités, à afficher des articles, à gérer des articles, etc.
Un article a généralement un titre, un auteur, une heure de publication, un contenu, et il faut les numéroter. Nous l'écrivons sous la forme d'une classe appelée classe Article, le code est le suivant :
//Article.cs
en utilisant System ;
espace de noms News_Articles.Data
{
/// <résumé>
/// Description récapitulative de l'article.
/// </summary>
Article de classe publique
{
private int _id; //Numéro d'article
chaîne privée _author; //L'auteur de l'article
chaîne privée _topic; //Le titre de l'article
private DateTime _postTime; //L'heure de publication de l'article
chaîne privée _content ; //Contenu de l'article
public int ID
{
obtenir {retour _id;}
définir { _id = valeur ;}
}
chaîne publique Auteur
{
obtenir { return _author }
définir { _auteur = valeur }
}
chaîne publique Sujet
{
obtenir { return _topic }
définir { _sujet = valeur }
}
chaîne publique Contenu
{
obtenir { retourner _content }
définir { _content = valeur }
}
public DateTime PostTime
{
obtenir { return _postTime }
définir { _postTime = valeur }
}
}
}
Ensuite, nous écrivons une classe de collection d'articles ArticleCollection
Le code est le suivant
Code du programme
//ArticleCollection.cs
en utilisant System[color=#0000ff] ;
System.Collections
;
{
/// <résumé>
/// Classe de collection d'articles, héritée de ArrayList
/// </summary>
classe publique ArticleCollection : ArrayList
{
public ArticleCollection() : base()
{
}
public ArticleCollection(ICollection c) : base(c)
{
}
}
}[/couleur]
Cette classe est équivalente à un DataSet dans ASP.NET (en fait les deux sont très différents). Son objectif principal est de collecter de nombreux articles afin que DataGrid ou DataList puissent être utilisés comme source de données dans ASP.NET. Afficher l'article.
Nous pouvons maintenant implémenter l'opération sur la base de données News_Articles. Comme je l'ai dit, il s'agit d'une classe d'opération de base de données. Autant l’appeler ArticleDb. L'implémentation est la suivante :
Code du programme
//ArticleDb.cs
utiliser le système ;
en utilisant System.Configuration ;
en utilisant System.Data ;
en utilisant System.Data.SqlClient ;
espace de noms News_Articles.Data ;
{
/**//// <résumé>
/// Classe d'opération de base de données, réalisant la lecture, l'insertion, la mise à jour et la suppression de la base de données d'articles
/// </summary>
classe publique ArticleDb
{
privé SqlConnection _conn ; //Connexion à la base de données SQL Server
chaîne privée _articledb = "News_Articles" ; //table de base de données d'articles SQL Server
/**//// <résumé>
/// Initialisation de la classe, mise en place de la connexion à la base de données
/// </summary>
ArticleDb public()
{
_conn = new SqlConnection(ConfigurationSettings.AppSettings["connectionString"]);
}
/**//// <résumé>
/// Ouvrir la connexion à la base de données
/// </summary>
public vide Ouvert()
{
si (_conn.State == ConnectionState.Closed)
_conn.Open();
}
/**//// <résumé>
/// Ferme la connexion à la base de données
/// </summary>
public void Fermer()
{
si (_conn.State == ConnectionState.Open)
_conn.Close();
}
/**//// <résumé>
/// Lire tous les articles de la base de données
/// </summary>
/// <retours>Collection d'articles</retours>
public ArticleCollection GetArticles()
{
ArticleCollection articles = new ArticleCollection();
string sql = "Sélectionner * FROM " + _articledb ;
SqlCommand cmd = new SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
pendant que(dr.Read())
{
Illustration de l'article = PopulateArticle(dr);
articles.Add(art);
}
dr.Close();
retourner les articles ;
}
/**//// <résumé>
/// Étant donné un numéro d'article, lire un article dans la base de données
/// </summary>
/// <retours>Article</retours>
Article public GetArticle (int articleId)
{
string sql = "Select * FROM " + _articledb + "Where ID='" + articleId + "'" ;
SqlCommand cmd = new SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
Article article = PopulateArticle(dr);
dr.Close();
retourner l'article ;
}
/**//// <résumé>
/// Mettre à jour les enregistrements de la base de données, veuillez noter que vous devez définir le numéro d'article
/// </summary>
/// <param name="article"></param>
public void UpdateArticle(Article article)
{
string sql = "Mise à jour " + _articledb + " SET Topic=@topic,Author=@author,Content=@content,PostTime=@postTime "
+ "Où ID = @articleId" ;
SqlCommand cmd = new 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).Value = article.Author;
cmd.Parameters.Add("@content",SqlDbType.NText).Value = article.Content;
cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value = article.PostTime;
cmd.ExecuteNonQuery(
}
/**//// <résumé>
/// Récupère les articles publiés par un auteur spécifique dans la base de données
/// </summary>
/// <param name="auteur"></param>
/// <retours>Collection d'articles</retours>
public ArticleCollection GetArticlesByAuthor (auteur de chaîne)
{
string sql = "Select * FROM " + _articledb +" Where Author='" + author + "'";
SqlCommand cmd = new SqlCommand(sql, _conn);
ArticleCollection
articleCollection = new ArticleCollection()
;
{
Article a = PopulateArticle(dr);
articleCollection.Add(a);
}
dr.Close();
retourner articleCollection ;
}
/**//// <résumé>
/// Supprimer un article avec un numéro donné
/// </summary>
/// <param name="articleID"></param>
public void SupprimerArticle(int articleID)
{
string sql = "Delete FROM " + _articledb + " Where ID='" + articleID + "'";
SqlCommand cmd = new SqlCommand(sql, _conn);
cmd.ExecuteNonQuery();
}
/**//// <résumé>
/// Générer un objet article via SqlDataReader
/// </summary>
/// <param name="dr"></param>
/// <retours></retours>
article privé PopulateArticle (SqlDataReader dr)
{
Art de l'article = nouvel article ();
art.ID = Convert.ToInt32 (dr ["ID"]);
art.Auteur = Convert.ToString(dr["Auteur"]);
art.Topic = Convert.ToString(dr["Sujet"]);
art.Content = Convert.ToString(dr["Content"]);
art.PostTime= Convert.ToDateTime(dr["PostTime"]);
retourner l'art;
}
/**//// <résumé>
/// Ajoute un article à la base de données et renvoie le numéro de l'article
/// </summary>
/// <param name="article"></param>
/// <returns>Le numéro de l'article qui vient d'être inséré</returns>
public int AddPost (article article)
{
string sql = "Insérer INTO " + _articledb +"(Auteur, Sujet, Contenu, PostTime)"+
"VALEURS (@author, @topic, @content, @postTime) "+
"Sélectionnez @postID = @@IDENTITY" ;
SqlCommand cmd = new SqlCommand(sql,_conn);
cmd.Parameters.Add("@postID",SqlDbType.Int,4);
cmd.Parameters["@postID"].Direction = ParameterDirection.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 = article.Content;
cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value = article.PostTime;
cmd.ExecuteNonQuery();
article.ID = (int)cmd.Parameters["@postID"].Value;
renvoyer l'article.ID ;
}
}
}
Le cadre de base est déjà disponible. Si nous souhaitons afficher les données de la base de données d'articles News_Artices dans une page ASP.NET, il suffit d'ajouter un DataGrid ou une DataList, puis de lier la source de données. Par exemple, ajoutez un DataGrid dans Default.aspx, nommez-le ArticlesDataGrid et ajoutez
le code du programme
dans le code d'arrière-plan Default.aspx.cs.
en utilisant News_Articles.Data ;
Et ajoutez le code suivant dans Page_Load :
code de programme
private void Page_Load (expéditeur de l'objet, System.EventArgs e)
{
// Mettez le code utilisateur pour initialiser la page ici
ArticleDb monArticleDb = new ArticleDb();
monArticleDb.Open();
Articles ArticleCollection = monArticleDb.GetArticles();
this.ArticlesDataGrid.DataSource = articles ;
si(!Page.IsPostBack)
{
this.ArticlesDataGrid.DataBind();
}
monArticleDb.Close();
}
De cette manière, tous les articles de la base de données d'articles peuvent être lus.
Si vous devez supprimer un article, ajoutez le code suivant :
Code programme
//Supprimez l'article numéroté 1
myArticleDb.DeleteArticle(1);
Insérez un article, le code est le suivant :
code de programme
//Insérez un nouvel article sans spécifier le numéro d'article. Le numéro d'article sera renvoyé par SQL Server une fois le numéro d'article inséré avec succès.
Article nouvelArticle = nouvel Article();
newArticle.Author = "Willmove";
newArticle.Topic = "Test de l'insertion d'un nouvel article";
newArticle.Content = "Voici le contenu de l'article que j'ai écrit";
newArticle.PostTime = DateTime.Maintenant ;
int articleId = monArticleDb.AddPost(newArticle);
Mettez à jour un article avec le code suivant :
code de programme
//Mettre à jour un article, veuillez noter que vous devez préciser le numéro de l'article
Article updateArticle = nouvel article();
updateArticle.ID = 3; //Notez que vous devez spécifier le numéro d'article
updateArticle.Author = "Willmove";
updateArticle.Topic = "Tester les données de mise à jour";
updateArticle.Content = "Voici le contenu de l'article que j'ai mis à jour";
updateArticle.PostTime = DateTime.Now ;
monArticleDb.UpdateArticle(updateArticle);
Ce qui précède n'est qu'un cadre, et de nombreux détails sur l'implémentation spécifique ne sont pas répertoriés. Mais sur la base du framework ci-dessus, vous pouvez plus facilement écrire du code pour les opérations de base de données. Une autre suggestion consiste à écrire l'instruction SQL ci-dessus pour l'accès à la base de données en tant que procédure stockée de base de données, par exemple en ajoutant un article :
Code de programme
Créer une PROCÉDURE AddPost
(
@ID int SORTIE,
@Auteur nvarchar(100),
@Sujet nvarchar(100),
@Contenu ntext,
@PostTime dateheure
)
COMME
Insérer INTO News_Articles(Author, Topic, Content, PostTime) VALUES (@Author, @Topic, @Content, @PostTime) ;
Sélectionnez @ID = @@IDENTITY
ALLER
Annexe 1 : Champs de la base de données News_Articles
du code de programme
indique si la longueur du type de données peut être nulle.
ID numéro d'article int 4 non
Titre de l'article du sujet nvarchar 100 non
L'auteur authornvarchar 100 est
Contenu article contenu ntext 16 Non
Heure de publication PostTime datetime 8 Non
La valeur par défaut de PostTime peut être définie sur (getutcdate())
L'instruction SQL est
Create TABLE [News_Articles] (
[ID] [int] IDENTITÉ (1, 1) NON NULLe,
[Sujet] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL,
[Auteur] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Contenu] [ntext] COLLATE Chinese_PRC_CI_AS NOT NULL,
[PostTime] [datetime] CONTRAINTE NON NULLe [DF_News_Articles_PostTime] PAR DÉFAUT (getutcdate())
) SUR [PRIMAIRE] TEXTIMAGE_ON [PRIMAIRE]
ALLER
Annexe 2 : Description du code source du projet News_Articles : Avant d'ouvrir le fichier de projet News_Articles.csproj, vous devez définir le chemin virtuel News_Articles ou modifier les paramètres dans News_Articles.csproj.webinfo. Pour un fonctionnement normal, SQL Server doit être installé et la base de données d'articles News_Articles doit être installée. Il existe des fichiers texte SQL dans le répertoire racine du code source du projet.