作者: ウィルムーブ
ホームページ: http://www.amuhouse.com
電子メール: [email protected]
免責事項:これは作者のオリジナル作品です。転載する場合は出典を明記してください。
ASP.NET は通常、バックエンド データベースとして SQL Server を使用します。一般に、ASP.NET データベース操作サンプル プログラムは個別のデータ アクセスを使用します。つまり、各ページはデータベースに接続し、データにアクセスし、データベースを閉じるためのコードを記述します。この方法にはいくつかの欠点があります。1 つは、データベースが変更された場合、データベース接続コードをページごとに変更する必要があることです。
2 番目の欠点は、コードの冗長性があり、多くのコードが重複して不要になることです。
そこで、一貫したデータベース操作クラスによるASP.NET型のデータアクセスの実装を試みました。
一般的な Web サイトにあるニュース リリース システムを例に挙げると、このデータベースには News_Articles という名前が必要です。ニュースリリースシステムでは、ニュースの発行、記事の表示、記事の管理などが行われます。
通常、記事にはタイトル、著者、発行時期、内容があり、それらに番号を付ける必要があります。これを Article クラスというクラスとして記述します。コードは次のとおりです。
//Article.cs
System を使用します
。
{
/// <概要>
/// 記事の概要説明。
/// </概要>
パブリッククラスの記事
{
private int _id; //記事番号
private string _author //記事の著者。
private string _topic //記事のタイトル
private DateTime _postTime //記事の公開時刻;
private string _content; //記事のコンテンツ
public int ID
{
get { return _id;}
セット { _id = 値;}
}
パブリック文字列 作成者
{
取得 { return _author }
セット { _author = 値 }
}
パブリック文字列トピック
{
{ トピックを返す } を取得します。
セット { _トピック = 値 }
}
パブリック文字列の内容
{
取得 { return _content }
セット { _content = 値 }
}
public DateTime PostTime
{
get { return _postTime }
セット { _postTime = 値 }
}
}
}
次に、記事コレクション クラス ArticleCollection を作成します。
コードは次のとおりです
プログラムコード
//ArticleCollection.cs
システムを使用[color=#0000ff];
System.Collections
名前空間
を使用します。
{
/// <概要>
/// ArrayList から継承された記事のコレクション クラス
/// </概要>
パブリック クラス ArticleCollection : ArrayList
{
public ArticleCollection() :base()
{
public ArticleCollection(ICollection c) :base(c
)
{
}
}
}[/色]
このクラスは ASP.NET の DataSet に相当します (実際には、この 2 つは非常に異なります)。その主な目的は、DataGrid または DataList を ASP.NET のデータ ソースとして使用できるようにすることです。ページを表示します。
これで、News_Articles データベースに操作を実装できます。前述したように、これはデータベース操作クラスです。 ArticleDb という名前を付けてもよいでしょう。実装は次のとおりです。
プログラム コード
//ArticleDb.cs
システムを使用する;
System.Configuration を使用します。
System.Data を使用します。
System.Data.SqlClient
名前空間
を使用します。
{
/**//// <概要>
/// 記事データベースの読み込み、挿入、更新、削除を実現するデータベース操作クラス
/// </概要>
パブリック クラス ArticleDb
{
private SqlConnection _conn; //SQL Server データベース接続;
private string _articledb = "News_Articles"; //SQL Server 記事データベース テーブル
/**//// <概要>
/// クラスの初期化、データベース接続のセットアップ
/// </概要>
public ArticleDb()
{
_conn = 新しい SqlConnection(ConfigurationSettings.AppSettings["connectionString"]);
}
/**//// <概要>
/// データベース接続を開く
/// </概要>
public void Open()
{
if(_conn.State == ConnectionState.Closed)
_conn.Open();
}
/**//// <概要>
/// データベース接続を閉じます
/// </概要>
public void Close()
{
if(_conn.State == ConnectionState.Open)
_conn.Close();
}
/**//// <概要>
/// データベース内のすべての記事を読む
/// </概要>
/// <returns>ArticleCollection</returns>
public ArticleCollection GetArticles()
{
ArticleCollection 記事 = new ArticleCollection();
string sql = "Select * FROM " + _articledb;
SqlCommand cmd = new SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
while(dr.Read())
{
記事アート = PopulateArticle(dr);
記事.追加(アート);
}
dr.Close();
記事を返品する。
}
/**//// <概要>
/// 記事番号を指定して、データベース内の記事を読み取ります
/// </概要>
/// <returns>記事</returns>
public Article GetArticle(intarticleId)
{
string sql = "Select * FROM " + _articledb + "Where ID='" +articleId + "'";
SqlCommand cmd = new SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
記事の記事 = PopulateArticle(dr);
dr.Close();
返品品。
}
/**//// <概要>
/// データベースレコードを更新します。記事番号を設定する必要があることに注意してください
/// </概要>
/// <param name="article"></param>
public void UpdateArticle(記事記事)
{
string sql = "Update " + _articledb +" SET Topic=@topic,Author=@author,Content=@content,PostTime=@postTime "
+ "ID = @articleId";
SqlCommand cmd = new SqlCommand(sql,_conn);
cmd.Parameters.Add("@articleId",SqlDbType.Int,4).Value = 記事.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
();
}
/**//// <概要>
/// データベース内の特定の著者によって公開された記事を取得します
/// </概要>
/// <param name="author"></param>
/// <returns>ArticleCollection</returns>
public ArticleCollection GetArticlesByAuthor(文字列作成者)
{
string sql = "Select * FROM " + _articledb +" Where Author='" + author + "'";
SqlCommand cmd = new SqlCommand(sql, _conn);
ArticleCollection itemCollection = new SqlDataReader(
)
while (dr.Read();
{
記事 a = PopulateArticle(dr);
記事コレクション.Add(a);
}
dr.Close();
記事コレクションを返す;
}
/**//// <概要>
/// 指定された番号の記事を削除します
/// </概要>
/// <param name="articleID"></param>
public void DeleteArticle(int 記事ID)
{
string sql = "削除 FROM " + _articledb + " Where ID='" + ArticleID + "'";
SqlCommand cmd = 新しい SqlCommand(sql, _conn);
cmd.ExecuteNonQuery();
}
/**//// <概要>
/// SqlDataReader を通じて記事オブジェクトを生成する
/// </概要>
/// <param name="dr"></param>
/// <戻り値></戻り値>
プライベート記事 PopulateArticle(SqlDataReader dr)
{
記事 art = new Article();
art.ID = Convert.ToInt32(dr["ID"]);
art.Author = Convert.ToString(dr["Author"]);
art.Topic = Convert.ToString(dr["トピック"]);
art.Content = Convert.ToString(dr["コンテンツ"]);
art.PostTime= Convert.ToDateTime(dr["PostTime"])
;
}
/**//// <概要>
/// データベースに記事を追加し、記事番号を返します
/// </概要>
/// <param name="article"></param>
/// <returns>挿入したばかりの記事の番号</returns>
public int AddPost(記事記事)
{
string sql = "INSERT INTO " + _articledb +"(著者,トピック,コンテンツ,投稿時間)"+
"VALUES(@author, @topic, @content, @postTime) "+
"@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();
記事.ID = (int)cmd.Parameters["@postID"].Value;
記事.IDを返す;
}
}
}
基本的な枠組みはすでに出来上がっています。記事データベース News_Artices のデータを ASP.NET ページに表示したい場合は、DataGrid または DataList を追加して、データ ソースをバインドするだけです。たとえば、Default.aspx に DataGrid を追加し、ArticlesDataGrid という名前を付け、
バックグラウンド コード Default.aspx.cs にプログラム コード
を追加します。
News_Articles.Data を使用します。
そして、Page_Load に次のコードを追加します。
プログラムコード
private void Page_Load(オブジェクト送信者、System.EventArgs e)
{
// ページを初期化するためのユーザー コードをここに入力します
ArticleDb myArticleDb = 新しい ArticleDb();
myArticleDb.Open();
ArticleCollection 記事 = myArticleDb.GetArticles();
this.ArticlesDataGrid.DataSource = 記事;
if(!Page.IsPostBack)
{
this.ArticlesDataGrid.DataBind();
myArticleDb.Close
();
}
このようにして、記事データベース内のすべての記事を読むことができます。
記事を削除する必要がある場合は、次のコードを追加します。
プログラム コード
//番号 1 の記事を削除します。
myArticleDb.DeleteArticle(1);
記事を挿入します。コードは次のとおりです。
プログラムコード
//記事番号を指定せずに新しい記事を挿入します。記事番号が正常に挿入されると、SQL Server によって記事番号が返されます。
記事 newArticle = 新しい記事();
newArticle.Author = "ウィルムーブ";
newArticle.Topic = "新しい記事の挿入をテストする";
newArticle.Content = "これは私が書いた記事の内容です";
newArticle.PostTime = DateTime.Now;
intarticleId = myArticleDb.AddPost(newArticle);
次のコードを使用して記事を更新します。
プログラムコード
//記事を更新します。記事番号を指定する必要があることに注意してください
記事の更新記事 = 新しい記事();
updateArticle.ID = 3 //記事番号を指定する必要があることに注意してください。
updateArticle.Author = "ウィルムーブ";
updateArticle.Topic = "更新データのテスト";
updateArticle.Content = "更新した記事の内容です";
updateArticle.PostTime = DateTime.Now;
myArticleDb.UpdateArticle(updateArticle);
上記は単なるフレームワークであり、具体的な実装についてはリストされていない詳細が多数あります。ただし、上記のフレームワークに基づいて、データベース操作用のコードをより簡単に作成できます。もう 1 つの提案は、記事を追加するなど、データベース アクセス用の上記の SQL ステートメントをデータベース ストアド プロシージャとして記述することです。
プログラム コード
プロシージャの作成
(
@ID int 出力、
@著者 nvarchar(100),
@トピックnvarchar(100)、
@Content ntext、
@PostTime日時
)
として
News_Articles(著者、トピック、コンテンツ、投稿時間) の値を挿入します (@著者、@トピック、@コンテンツ、@投稿時間);
@ID = @@IDENTITY を選択します
行く
付録 1: News_Articles データベースのフィールド
プログラム コードの
フィールド名は、データ型の長さを null にできるかどうかを示します。
ID 品番 int 4 no
トピック記事のタイトル nvarchar 100 no
著者の authornvarchar 100 は
コンテンツ記事の内容 ntext 16 いいえ
PostTime 公開時刻 datetime 8 いいえ
PostTime のデフォルト値は (getutcdate()) に設定できます。
SQL ステートメントは
Create TABLE [News_Articles] (
[ID] [int] IDENTITY (1, 1) NOT NULL、
[トピック] [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] DEFAULT (getutcdate())
) オン [プライマリ] TEXTIMAGE_ON [プライマリ]
行く
付録 2: News_Articles プロジェクトのソース コードの説明: プロジェクト ファイル News_Articles.csproj を開く前に、仮想パス News_Articles を設定するか、News_Articles.csproj.webinfo の設定を変更する必要があります。通常の操作では、SQL Server がインストールされ、記事データベース News_Articles がインストールされている必要があります。プロジェクトのソース コードのルート ディレクトリに SQL テキスト ファイルがあります。