Pengarang: Willmove
Halaman beranda: http://www.amuhouse.com
Email: [email protected]
Penafian: Ini adalah karya asli penulis. Harap sebutkan sumbernya saat mencetak ulang.
ASP.NET umumnya menggunakan SQL Server sebagai database backend. Umumnya, program contoh operasi database ASP.NET menggunakan akses data terpisah, yang berarti setiap halaman menulis kode untuk menyambung ke database, mengakses data, dan menutup database. Cara ini memiliki beberapa kelemahan, salah satunya adalah jika database Anda berubah, Anda harus mengubah kode koneksi database halaman demi halaman.
Kerugian kedua adalah redundansi kode. Banyak kode yang diulang-ulang dan tidak diperlukan.
Oleh karena itu, saya mencoba mengimplementasikan akses data tipe ASP.NET melalui kelas operasi database yang konsisten.
Mari kita ambil sistem rilis berita yang ditemukan di situs umum sebagai contoh. Ini memerlukan database artikel. Kami menamai database ini News_Articles. Sistem rilis berita melibatkan penerbitan berita, menampilkan artikel, mengelola artikel, dll.
Sebuah artikel umumnya memiliki judul, pengarang, waktu terbit, isi, dan perlu kita beri nomor. Kita menulisnya sebagai kelas yang disebut kelas Artikel, kodenya sebagai berikut:
//Artikel.cs
menggunakan Sistem;
namespace Berita_Artikel.Data
{
/// <ringkasan>
/// Deskripsi ringkasan untuk Artikel.
/// </ringkasan>
Artikel kelas publik
{
pribadi int _id; //Nomor artikel
string pribadi _penulis; //Penulis artikel
string pribadi _topic; //Judul artikel
private DateTime _postTime; //Waktu publikasi artikel
string pribadi _content; //Isi artikel
ID int publik
{
dapatkan { kembalikan _id;}
setel { _id = nilai;}
}
string publik Penulis
{
dapatkan { kembalikan _penulis }
setel { _penulis = nilai;
}
Topik string publik
{
dapatkan { kembalikan _topik }
setel { _topik = nilai;
}
Konten string publik
{
dapatkan { kembalikan _konten }
setel { _konten = nilai }
}
TanggalWaktu Publik Waktu Posting
{
dapatkan { return _postTime }
setel { _postTime = nilai;
}
}
}
Kemudian kita menulis kumpulan artikel kelas ArticleCollection
Kodenya adalah sebagai berikut
Kode program
//ArticleCollection.cs
menggunakan Sistem[warna=#0000ff];
menggunakan System.Collections;
namespace News_Articles.Data
{
/// <ringkasan>
/// Kelas kumpulan artikel, yang diwarisi dari ArrayList
/// </ringkasan>
Koleksi Artikel kelas publik : ArrayList
{
Koleksi Artikel publik() : base()
{
}
Koleksi Artikel publik(Koleksi c): basis(c)
{
}
}
}[/warna]
Kelas ini setara dengan DataSet di ASP.NET (sebenarnya keduanya sangat berbeda). Tujuan utamanya adalah mengumpulkan banyak artikel sehingga DataGrid atau DataList dapat digunakan sebagai sumber data di ASP.NET. halaman. Tampilkan artikel.
Sekarang kita bisa mengimplementasikan operasi pada database News_Articles. Seperti yang saya katakan, ini adalah kelas operasi database. Sebaiknya beri nama ArticleDb. Implementasinya adalah sebagai berikut:
Kode program
//ArticleDb.cs
menggunakan Sistem;
menggunakan Sistem.Konfigurasi;
menggunakan Sistem.Data;
menggunakan System.Data.SqlClient;
namespace News_Articles.Data
{
/**//// <ringkasan>
/// Kelas operasi basis data, mewujudkan pembacaan, penyisipan, pembaruan dan penghapusan basis data artikel
/// </ringkasan>
ArticleDb kelas publik
{
pribadi SqlConnection _conn; //koneksi database SQL Server
string pribadi _articledb = "News_Articles"; //tabel database artikel SQL Server
/**//// <ringkasan>
/// Inisialisasi kelas, menyiapkan koneksi database
/// </ringkasan>
ArtikelDb publik()
{
_conn = new SqlConnection(ConfigurationSettings.AppSettings["connectionString"]);
}
/**//// <ringkasan>
/// Buka koneksi basis data
/// </ringkasan>
kekosongan publik Buka()
{
if(_conn.State == ConnectionState.Tertutup)
_sambungan.Buka();
}
/**//// <ringkasan>
/// Tutup koneksi database
/// </ringkasan>
kekosongan publik Tutup()
{
if(_conn.State == ConnectionState.Terbuka)
_sambungan.Tutup();
}
/**//// <ringkasan>
/// Baca semua artikel di database
/// </ringkasan>
/// <returns>ArtikelKoleksi</returns>
Koleksi Artikel publik GetArticles()
{
Artikel ArticleCollection = ArticleCollection baru();
string sql = "Pilih * DARI " + _articledb;
SqlCommand cmd = baru SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
while(dr.Baca())
{
Seni artikel = PopulateArticle(dr);
artikel.Tambahkan(seni);
}
dr.Tutup();
mengembalikan barang;
}
/**//// <ringkasan>
/// Diberi nomor artikel, baca artikel di database
/// </ringkasan>
/// <returns>Artikel</returns>
Artikel publik GetArticle(int articleId)
{
string sql = "Pilih * DARI " + _articledb + "Di mana ID='" + articleId + "'";
SqlCommand cmd = baru SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
Artikel artikel = PopulateArticle(dr);
dr.Tutup();
artikel pengembalian;
}
/**//// <ringkasan>
/// Perbarui catatan basis data, harap dicatat bahwa Anda perlu mengatur nomor artikel
/// </ringkasan>
/// <param nama="artikel"></param>
public void UpdateArticle(Artikel artikel)
{
string sql = "Perbarui " + _articledb +" SET Topik=@topic,Penulis=@penulis,Konten=@konten,PostTime=@postTime "
+ "Di mana ID = @articleId";
SqlCommand cmd = new SqlCommand(sql,_conn);
cmd.Parameters.Add("@articleId",SqlDbType.Int,4).Value = artikel.ID;
cmd.Parameters.Add("@topic",SqlDbType.NVarChar,100).Value = artikel.Topik;
cmd.Parameters.Add("@author",SqlDbType.NVarChar,100).Value = article.Author;
cmd.Parameters.Add("@content",SqlDbType.NText).Value = artikel.Konten;
cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Nilai = artikel.PostTime;
cmd.ExecuteNonQuery()
;
/**//// <ringkasan>
/// Dapatkan artikel yang diterbitkan oleh penulis tertentu di database
/// </ringkasan>
/// <param nama="penulis"></param>
/// <returns>ArtikelKoleksi</returns>
Koleksi Artikel publik GetArticlesByAuthor(penulis string)
{
string sql = "Pilih * DARI " + _articledb +" Dimana Penulis='" + penulis + "'";
SqlCommand cmd = new SqlCommand(sql, _conn);
ArticleCollection articleCollection = new ArticleCollection();
SqlDataReader
dr = cmd.ExecuteReader();
{
Artikel a = PopulateArticle(dr);
articleCollection.Add(a);
}
dr.Tutup();
kembalikan artikelKoleksi;
}
/**//// <ringkasan>
/// Menghapus artikel dengan nomor tertentu
/// </ringkasan>
/// <param nama="articleID"></param>
kekosongan publik HapusArtikel(int ID artikel)
{
string sql = "Hapus DARI " + _articledb + " Dimana ID='" + articleID + "'";
SqlCommand cmd = baru SqlCommand(sql, _conn);
cmd.ExecuteNonQuery();
}
/**//// <ringkasan>
/// Hasilkan objek artikel melalui SqlDataReader
/// </ringkasan>
/// <param nama="dr"></param>
/// <pengembalian></pengembalian>
Artikel pribadi PopulateArticle(SqlDataReader dr)
{
Seni artikel = Artikel baru();
seni.ID = Convert.ToInt32(dr["ID"]);
art.Penulis = Konversi.ToString(dr["Penulis"]);
art.Topik = Konversi.ToString(dr["Topik"]);
seni.Konten = Konversi.ToString(dr["Konten"]);
art.PostTime= Convert.ToDateTime(dr["PostTime"])
;
}
/**//// <ringkasan>
/// Tambahkan artikel ke database dan kembalikan nomor artikelnya
/// </ringkasan>
/// <param nama="artikel"></param>
/// <returns>Nomor artikel yang baru saja disisipkan</returns>
public int AddPost(Artikel artikel)
{
string sql = "Masukkan KE DALAM" + _articledb +"(Penulis,Topik,Konten,Waktu Posting)"+
"NILAI(@penulis, @topik, @konten, @postTime) "+
"Pilih @postID = @@IDENTITY";
SqlCommand cmd = baru SqlCommand(sql,_conn);
cmd.Parameter.Tambahkan("@postID",SqlDbType.Int,4);
cmd.Parameters["@postID"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@author",SqlDbType.NVarChar,100).Value = artikel.Penulis;
cmd.Parameters.Add("@topic",SqlDbType.NVarChar,400).Value = artikel.Topik;
cmd.Parameters.Add("@content",SqlDbType.Text).Value = artikel.Konten;
cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value = artikel.PostTime;
cmd.ExecuteNonQuery();
artikel.ID = (int)cmd.Parameter["@postID"].Nilai;
kembalikan artikel.ID;
}
}
}
Kerangka dasarnya sudah keluar. Jika kita ingin menampilkan data dari database artikel News_Artices di halaman ASP.NET, kita hanya perlu menambahkan DataGrid atau DataList lalu mengikat sumber datanya. Misalnya, tambahkan DataGrid di Default.aspx, beri nama ArticlesDataGrid, dan tambahkan
kode program
di kode latar belakang Default.aspx.cs
menggunakan Berita_Artikel.Data;
Dan tambahkan kode berikut di Page_Load:
kode program
private void Page_Load(pengirim objek, System.EventArgs e)
{
// Masukkan kode pengguna untuk menginisialisasi halaman di sini
ArticleDb myArticleDb = ArtikelDb baru();
myArticleDb.Open();
Artikel Koleksi Artikel = myArticleDb.GetArticles();
this.ArticlesDataGrid.DataSource = artikel;
if(!Halaman.IsPostBack)
{
ini.ArtikelDataGrid.DataBind();
}
myArticleDb.Tutup();
}
Dengan cara ini, semua artikel di database artikel dapat dibaca.
Jika ingin menghapus artikel, tambahkan kode berikut:
Kode program
//Hapus artikel bernomor 1
myArticleDb.DeleteArticle(1);
Sisipkan artikel, kodenya sebagai berikut:
kode program
//Sisipkan artikel baru tanpa menentukan nomor artikel. Nomor artikel akan dikembalikan oleh SQL Server setelah nomor artikel berhasil dimasukkan.
Artikel newArticle = Artikel baru();
newArticle.Author = "Akan pindah";
newArticle.Topic = "Uji menyisipkan artikel baru";
newArticle.Content = "Inilah isi artikel yang saya tulis";
newArticle.PostTime = DateTime.Sekarang;
int articleId = myArticleDb.AddPost(newArticle);
Perbarui artikel dengan kode berikut:
kode program
//Perbarui artikel, harap diperhatikan bahwa Anda perlu menentukan nomor artikel
Pembaruan artikelArtikel = Artikel baru();
updateArticle.ID = 3; //Perhatikan bahwa Anda perlu menentukan nomor artikel
updateArticle.Author = "Akan pindah";
updateArticle.Topic = "Uji pembaruan data";
updateArticle.Content = "Inilah isi artikel yang saya perbarui";
updateArticle.PostTime = DateTime.Sekarang;
myArticleDb.UpdateArticle(updateArticle);
Di atas hanyalah kerangka kerja, dan ada banyak detail tentang implementasi spesifik yang tidak dicantumkan. Namun berdasarkan framework di atas, Anda dapat lebih mudah menulis kode untuk pengoperasian database. Saran lain adalah menulis pernyataan SQL di atas untuk akses database sebagai prosedur tersimpan database, seperti menambahkan artikel:
Kode Program
Buat PROSEDUR AddPost
(
@ID ke KELUARAN,
@Penulis nvarchar(100),
@Topik nvarchar(100),
@Konten nteks,
@ Tanggal waktu PostTime
)
SEBAGAI
Sisipkan KE DALAM Artikel_Berita(Penulis, Topik, Konten, PostTime) NILAI (@Penulis, @Topik, @Konten, @PostTime);
Pilih @ID = @@IDENTITAS
PERGI
Lampiran 1: Bidang database News_Articles
kode program
menjelaskan apakah panjang tipe data bisa nol
Nomor artikel ID int 4 no
Judul artikel topik nvarchar 100 no
Penulis authornvarchar 100 adalah
Isi artikel isi nteks 16 No
Waktu publikasi PostTime datetime 8 Tidak
Nilai default PostTime dapat diatur ke (getutcdate())
Pernyataan SQL adalah
Create TABLE [News_Articles] (
[ID] [int] IDENTITAS (1, 1) BUKAN NULL,
[Topik] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS BUKAN NULL,
[Penulis] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Isi] [nteks] COLLATE Chinese_PRC_CI_AS BUKAN NULL,
[Waktu Posting] [waktu tanggal] BUKAN KENDALA NULL [DF_News_Articles_PostTime] DEFAULT (getutcdate())
) DI [UTAMA] TEXTIMAGE_ON [UTAMA]
PERGI
Lampiran 2: Deskripsi kode sumber proyek News_Articles: Sebelum membuka file proyek News_Articles.csproj, Anda perlu mengatur jalur virtual News_Articles, atau mengubah pengaturan di News_Articles.csproj.webinfo. Untuk pengoperasian normal, SQL Server harus diinstal dan database artikel News_Articles harus diinstal. Ada file teks SQL di direktori root kode sumber proyek.