Autor: Willmove
Página inicial: http://www.amuhouse.com
E-mail: [email protected]
Isenção de responsabilidade: este é o trabalho original do autor. Por favor, indique a fonte ao reimprimir.
ASP.NET geralmente usa SQL Server como banco de dados de back-end. Geralmente, os programas de exemplo de operação de banco de dados ASP.NET usam acesso a dados separado, o que significa que cada página escreve código para se conectar ao banco de dados, acessar dados e fechar o banco de dados. Este método traz algumas desvantagens: se o seu banco de dados for alterado, você deverá alterar o código de conexão do banco de dados página por página.
A segunda desvantagem é a redundância de código. Muito código é repetido e desnecessário.
Portanto, tentei implementar o acesso a dados do tipo ASP.NET por meio de uma classe de operação de banco de dados consistente.
Tomemos como exemplo o sistema de comunicados à imprensa encontrado em sites gerais. Ele requer um banco de dados de artigos. O sistema de divulgação de notícias envolve a publicação de notícias, exibição de artigos, gerenciamento de artigos, etc.
Um artigo geralmente tem título, autor, época de publicação, conteúdo e precisamos numerá-los. Nós o escrevemos como uma classe chamada classe Article, o código é o seguinte:
//Article.cs
usando o
namespace News_Articles.Data
;
{
/// <resumo>
/// Descrição resumida do artigo.
/// </sumário>
artigo de classe pública
{
private int _id; //Número do artigo
string privada _autor; //O autor do artigo
string privada _topic; //O título do artigo
private DateTime _postTime; //A hora de publicação do artigo
private string _content; //Conteúdo do artigo
public int ID
{
obter {retornar _id;}
definir { _id = valor;}
}
string pública Autor
{
obter {retornar _autor};
definir {_autor = valor};
}
Tópico de string pública
{
obter {retornar _tópico};
definir {_tópico = valor};
}
Conteúdo de string pública
{
obter {retornar _conteúdo};
definir {_conteúdo = valor};
}
data e hora pública PostTime
{
obter {retornar _postTime};
definir {_postTime = valor};
}
}
}
Em seguida, escrevemos uma classe de coleção de artigos ArticleCollection
O código é o seguinte
Código do programa
//ArticleCollection.cs
usando Sistema[color=#0000ff];
o namespace
System.Collections;
{
/// <resumo>
/// Coleção de classe de artigos, herdada de ArrayList
/// </sumário>
classe pública ArticleCollection: ArrayList
{
public ArticleCollection() : base()
{
}
public ArticleCollection(ICollection c): base(c)
{
}
}
}[/cor]
Esta classe é equivalente a um DataSet no ASP.NET (na verdade os dois são muito diferentes). Seu objetivo principal é coletar muitos artigos para que DataGrid ou DataList possam ser usados como fonte de dados no ASP.NET. página Mostrar artigo.
Agora podemos implementar a operação no banco de dados News_Articles. Como eu disse, esta é uma classe de operação de banco de dados. É melhor chamá-lo de ArticleDb. A implementação é a seguinte:
Código do programa
//ArticleDb.cs
usando o sistema;
usando System.Configuration;
usando System.Data;
usando
o namespace System.Data.SqlClient News_Articles.Data
;
{
/**//// <resumo>
/// Classe de operação do banco de dados, realizando leitura, inserção, atualização e exclusão do banco de dados de artigos
/// </sumário>
classe pública ArticleDb
{
private SqlConnection _conn; //Conexão com banco de dados SQL Server
private string _articledb = "News_Articles"; //tabela de banco de dados de artigos do SQL Server
/**//// <resumo>
/// Inicialização da classe, configurando a conexão com o banco de dados
/// </sumário>
artigo públicoDb()
{
_conn = new SqlConnection(ConfigurationSettings.AppSettings["connectionString"]);
}
/**//// <resumo>
///Abre conexão com o banco de dados
/// </sumário>
público vazio Abrir()
{
if(_conn.State == ConnectionState.Closed)
_conn.Open();
}
/**//// <resumo>
///Fecha a conexão com o banco de dados
/// </sumário>
público vazio Fechar()
{
if(_conn.State == ConnectionState.Open)
_conn.Fechar();
}
/**//// <resumo>
/// Ler todos os artigos no banco de dados
/// </sumário>
/// <returns>ArticleCollection</returns>
public ArticleCollection GetArticles()
{
ArticleCollection artigos = new ArticleCollection();
string sql = "Selecione * FROM" + _articledb;
SqlCommand cmd = new SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
enquanto(dr.Leitura())
{
Arte do artigo = PopulateArticle(dr);
artigos.Add(arte);
}
dr.Fechar();
devolver artigos;
}
/**//// <resumo>
/// Dado um número de artigo, leia um artigo no banco de dados
/// </sumário>
/// <returns>Artigo</returns>
artigo público GetArticle(int articleId)
{
string sql = "Selecione * FROM " + _articledb + "Onde ID='" + articleId + "'";
SqlCommand cmd = new SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
Artigo artigo = PopulateArticle(dr);
dr.Fechar();
artigo de devolução;
}
/**//// <resumo>
/// Atualize os registros do banco de dados, observe que você precisa definir o número do artigo
/// </sumário>
/// <param name="article"></param>
public void UpdateArticle (artigo do artigo)
{
string sql = "Atualizar " + _articledb +" SET Topic=@topic,Author=@author,Content=@content,PostTime=@postTime "
+ "Onde ID = @articleId";
SqlCommand cmd = new SqlCommand(sql,_conn);
cmd.Parameters.Add("@articleId",SqlDbType.Int,4).Value = artigo.ID;
cmd.Parameters.Add("@topic",SqlDbType.NVarChar,100).Value = artigo.Tópico;
cmd.Parameters.Add("@autor",SqlDbType.NVarChar,100).Value = artigo.Autor;
cmd.Parameters.Add("@content",SqlDbType.NText).Value = artigo.Conteúdo;
"
,SqlDbType.DateTime).Value = artigo.PostTime
;
/**//// <resumo>
/// Obtém os artigos publicados por um autor específico na base de dados
/// </sumário>
/// <param name="autor"></param>
/// <returns>ArticleCollection</returns>
public ArticleCollection GetArticlesByAuthor(string autor)
{
string sql = "Selecione * FROM " + _articledb +" Onde Autor='" + autor + "'";
SqlCommand cmd = new SqlCommand(sql, _conn);
ArticleCollection
articleCollection = new ArticleCollection()
;
{
Artigo a = PopulateArticle(dr);
artigoCollection.Add(a);
}
dr.Fechar();
retornar artigoColeção;
}
/**//// <resumo>
/// Exclui um artigo com um determinado número
/// </sumário>
/// <param name="articleID"></param>
public void DeleteArticle(int ID do artigo)
{
string sql = "Excluir FROM " + _articledb + " Onde ID='" + articleID + "'";
SqlCommand cmd = new SqlCommand(sql, _conn);
cmd.ExecuteNonQuery();
}
/**//// <resumo>
/// Gera objeto artigo através de SqlDataReader
/// </sumário>
/// <param name="dr"></param>
/// <retorna></retorna>
artigo privado PopulateArticle (SqlDataReader dr)
{
Arte do artigo = novo Artigo()
;
art.Autor = Convert.ToString(dr["Autor"]);
art.Topic = Convert.ToString(dr["Tópico"]);
art.Content = Convert.ToString(dr["Conteúdo"]);
art.PostTime= Convert.ToDateTime(dr["PostTime"])
;
}
/**//// <resumo>
/// Adiciona um artigo ao banco de dados e retorna o número do artigo
/// </sumário>
/// <param name="article"></param>
/// <returns>O número do artigo que acabou de ser inserido</returns>
public int AddPost (artigo artigo)
{
string sql = "Inserir INTO " + _articledb +"(Autor,Tópico,Conteúdo,PostTime)"+
"VALORES(@autor, @topic, @content, @postTime) "+
"Selecione @postID = @@IDENTIDADE";
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 = artigo.Autor;
cmd.Parameters.Add("@topic",SqlDbType.NVarChar,400).Value = artigo.Tópico;
cmd.Parameters.Add("@content",SqlDbType.Text).Value = artigo.Conteúdo;
cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value = artigo.PostTime;
cmd.ExecuteNonQuery();
artigo.ID = (int)cmd.Parameters["@postID"].Valor;
retornar artigo.ID;
}
}
}
A estrutura básica já foi lançada. Se quisermos exibir dados do banco de dados de artigos News_Artices em uma página ASP.NET, precisamos apenas adicionar um DataGrid ou DataList e então vincular a fonte de dados. Por exemplo, adicione um DataGrid em Default.aspx, nomeie-o ArticlesDataGrid e adicione
o código do programa
no código de segundo plano Default.aspx.cs
usando News_Articles.Data;
E adicione o seguinte código em Page_Load:
código do programa
private void Page_Load (remetente do objeto, System.EventArgs e)
{
//Coloque aqui o código do usuário para inicializar a página
ArtigoDb meuArtigoDb = new ArtigoDb();
meuArtigoDb.Open();
ArticleCollection artigos = myArticleDb.GetArticles();
this.ArticlesDataGrid.DataSource = artigos;
if(!Page.IsPostBack)
{
this.ArticlesDataGrid.DataBind();
}
meuArtigoDb.Close();
}
Desta forma, todos os artigos da base de dados de artigos podem ser lidos.
Caso necessite excluir um artigo, adicione o seguinte código:
Código do programa
//Excluir o artigo número 1
myArticleDb.DeleteArticle(1);
Insira um artigo, o código é o seguinte:
código do programa
//Inserir um novo artigo sem especificar o número do artigo O número do artigo será retornado pelo SQL Server após o número do artigo ser inserido com sucesso.
Artigo novoArtigo = novo Artigo();
novoArtigo.Autor = "Willmove";
newArticle.Topic = "Teste a inserção de um novo artigo";
newArticle.Content = "Este é o conteúdo do artigo que escrevi";
novoArtigo.PostTime = DateTime.Now;
int artigoId = meuArticleDb.AddPost(newArticle);
Atualize um artigo com o seguinte código:
código do programa
//Atualize um artigo, observe que você precisa especificar o número do artigo
Atualização do artigoArtigo = novo Artigo();
updateArticle.ID = 3; //Observe que você precisa especificar o número do artigo
updateArticle.Author = "Willmove";
updateArticle.Topic = "Testar dados de atualização";
updateArticle.Content = "Este é o conteúdo do artigo que atualizei";
updateArticle.PostTime = DateTime.Now;
meuArtigoDb.UpdateArtigo(atualizaçãoArtigo);
O texto acima é apenas uma estrutura e há muitos detalhes sobre a implementação específica que não estão listados. Mas com base na estrutura acima, você pode escrever código para operações de banco de dados com mais facilidade. Outra sugestão é escrever a instrução SQL acima para acesso ao banco de dados como um procedimento armazenado de banco de dados, como adicionar um artigo:
Código do Programa
Criar PROCEDIMENTO AddPost
(
@ID int SAÍDA,
@Autor nvarchar(100),
@Tópico nvarchar(100),
@Content ntext,
@PostTime data e hora
)
COMO
Insira INTO News_Articles (Autor, Tópico, Conteúdo, PostTime) VALORES (@Autor, @Topic, @Content, @PostTime);
Selecione @ID = @@IDENTIDADE
IR
Apêndice 1: Campos do banco de dados News_Articles
do código do programa
descreve se o comprimento do tipo de dados pode ser nulo
Número do artigo ID int 4 não
Título do artigo do tópico nvarchar 100 não
Autor autornvarchar 100 é
Conteúdo do artigo conteúdo ntext 16 Não
Hora de publicação PostTime datetime 8 Não
O valor padrão de PostTime pode ser definido como (getutcdate())
A instrução SQL é
Create TABLE [News_Articles] (
[ID] [int] IDENTIDADE (1, 1) NÃO NULO,
[Tópico] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL,
[Autor] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Conteúdo] [ntext] COLLATE Chinese_PRC_CI_AS NOT NULL,
[PostTime] [datetime] NÃO NULL CONSTRAINT [DF_News_Articles_PostTime] PADRÃO (getutcdate())
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
IR
Apêndice 2: Descrição do código-fonte do projeto News_Articles: Antes de abrir o arquivo do projeto News_Articles.csproj, você precisa definir o caminho virtual News_Articles ou alterar as configurações em News_Articles.csproj.webinfo. Para operação normal, o SQL Server deve estar instalado e o banco de dados de artigos News_Articles deve estar instalado. Existem arquivos de texto SQL no diretório raiz do código-fonte do projeto.