Autor: Willmove
Página de inicio: http://www.amuhouse.com
Correo electrónico: [email protected]
Descargo de responsabilidad: este es el trabajo original del autor. Indique la fuente al reimprimir.
ASP.NET generalmente utiliza SQL Server como base de datos backend. Generalmente, los programas de muestra de operación de bases de datos ASP.NET utilizan acceso a datos separados, lo que significa que cada página escribe código para conectarse a la base de datos, acceder a los datos y cerrar la base de datos. Este método trae algunas desventajas. Una es que si su base de datos cambia, debe cambiar el código de conexión de la base de datos página por página.
La segunda desventaja es la redundancia de código. Una gran cantidad de código se repite y es innecesario.
Por lo tanto, intenté implementar el acceso a datos de tipo ASP.NET a través de una clase de operación de base de datos consistente.
Tomemos como ejemplo el sistema de comunicados de prensa que se encuentra en los sitios web generales. Requiere una base de datos de artículos. A esta base de datos la denominamos News_Articles. El sistema de comunicados de prensa implica publicar noticias, mostrar artículos, gestionar artículos, etc.
Un artículo generalmente tiene título, autor, hora de publicación, contenido y debemos numerarlos. Lo escribimos como una clase llamada clase Artículo, el código es el siguiente:
//Article.cs
usando el
espacio de nombres News_Articles.Data
{
/// <resumen>
/// Descripción resumida del artículo.
/// </summary>
artículo de clase pública
{
privado int _id; //Número de artículo
cadena privada _autor //El autor del artículo
cadena privada _topic; //El título del artículo.
private DateTime _postTime //La hora de publicación del artículo
cadena privada _content //Contenido del artículo
public int ID
{
obtener {return _id;}
establecer { _id = valor;}
}
Autor de cadena pública
{
obtener {return_author}
establecer { _autor = valor }
}
Tema de cadena pública
{
obtener {return_topic}
establecer { _tema = valor }
}
Contenido de cadena pública
{
obtener {return_content}
establecer { _contenido = valor }
}
Fecha y hora pública Hora de publicación
{
obtener { return _postTime }
establecer { _postTime = valor }
}
}
}
Luego escribimos una clase de colección de artículos ArticleCollection
El código es el siguiente.
Código del programa
//ArticleCollection.cs
usando Sistema[color=#0000ff];
usando el espacio de nombres System.Collections
News_Articles.Data
;
{
/// <resumen>
/// Clase de colección de artículos, heredada de ArrayList
/// </summary>
Colección de artículos de clase pública: ArrayList
{
Colección de artículos públicos(): base()
{
}
colección de artículos pública (ICollection c): base (c)
{
}
}
}[/color]
Esta clase es equivalente a un DataSet en ASP.NET (en realidad los dos son muy diferentes. Es muy simple. Su objetivo principal es recopilar muchos artículos para que DataGrid o DataList puedan usarse como fuente de datos en ASP.NET). página.
Ahora podemos implementar la operación en la base de datos News_Articles. Como dije, esta es una clase de operación de base de datos. También podría llamarlo ArticleDb. La implementación es la siguiente:
Código de programa
//ArticleDb.cs
usando Sistema;
usando System.Configuration;
usando System.Data;
usando el espacio de nombres System.Data.SqlClient
News_Articles.Data
;
{
/**//// <resumen>
/// Clase de operación de base de datos, que realiza lectura, inserción, actualización y eliminación de la base de datos de artículos
/// </summary>
clase pública ArticleDb
{
Private SqlConnection _conn // Conexión de base de datos de SQL Server
cadena privada _articledb = "News_Articles" //tabla de base de datos de artículos de SQL Server
/**//// <resumen>
/// Inicialización de la clase, configurando la conexión a la base de datos.
/// </summary>
Artículo públicoDb()
{
_conn = new SqlConnection(ConfigurationSettings.AppSettings["connectionString"]);
}
/**//// <resumen>
/// Abrir conexión a la base de datos
/// </summary>
vacío público abierto()
{
if(_conn.State == ConnectionState.Cerrado)
_conn.Open();
}
/**//// <resumen>
/// Cerrar la conexión a la base de datos
/// </summary>
cierre público vacío()
{
if(_conn.State == ConnectionState.Open)
_conn.Close();
}
/**//// <resumen>
/// Leer todos los artículos en la base de datos.
/// </summary>
/// <returns>Colección de artículos</returns>
Colección de artículos públicos GetArticles()
{
Artículos de la Colección de artículos = nueva Colección de artículos();
cadena sql = "Seleccionar * DE " + _articledb;
SqlCommand cmd = nuevo SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
mientras (dr.Read())
{
Arte del artículo = PopulateArticle(dr);
artículos.Agregar(arte);
}
dr.Cerrar();
devolver artículos;
}
/**//// <resumen>
/// Dado un número de artículo, lee un artículo en la base de datos.
/// </summary>
/// <returns>Artículo</returns>
Artículo público Obtener artículo (int ID de artículo)
{
cadena sql = "Seleccionar * DE " + _articledb + "Donde ID='" + artículoId + "'";
SqlCommand cmd = nuevo SqlCommand(sql,_conn);
SqlDataReader dr = cmd.ExecuteReader();
Artículo artículo = PopulateArticle(dr);
dr.Cerrar();
devolver artículo;
}
/**//// <resumen>
/// Actualice los registros de la base de datos, tenga en cuenta que debe configurar el número de artículo
/// </summary>
/// <param nombre="artículo"></param>
Public void UpdateArticle (artículo)
{
string sql = "Actualizar " + _articledb +" SET Tema=@tema,Autor=@autor,Contenido=@contenido,PostTime=@postTime "
+ "Donde ID = @artículoId";
SqlCommand cmd = nuevo SqlCommand(sql,_conn);
cmd.Parameters.Add("@articleId",SqlDbType.Int,4).Value = artículo.ID;
cmd.Parameters.Add("@topic",SqlDbType.NVarChar,100).Value = artículo.Topic;
cmd.Parameters.Add("@author",SqlDbType.NVarChar,100).Value = artículo.Author;
cmd.Parameters.Add("@content",SqlDbType.NText).Value = artículo.Contenido;
cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value = artículo.PostTime
cmd.ExecuteNonQuery()
;
/**//// <resumen>
/// Obtener los artículos publicados por un autor específico en la base de datos
/// </summary>
/// <param nombre="autor"></param>
/// <returns>Colección de artículos</returns>
Colección de artículos públicos GetArticlesByAuthor (autor de cadena)
{
string sql = "Seleccionar * FROM " + _articledb +" Donde Autor='" + autor + "'";
SqlCommand cmd = nuevo SqlCommand(sql, _conn);
ArticleCollection
ArticleCollection = nuevo ArticleCollection()
;
{
Artículo a = PopulateArticle(dr);
artículoCollection.Add(a);
}
dr.Cerrar();
devolver colección de artículos;
}
/**//// <resumen>
/// Eliminar un artículo con un número determinado
/// </summary>
/// <nombre del parámetro="ID del artículo"></param>
public void Eliminar artículo (int ID de artículo)
{
cadena sql = "Eliminar DE" + _articledb + " Donde ID='" + artículoID + "'";
SqlCommand cmd = nuevo SqlCommand(sql, _conn);
cmd.ExecuteNonQuery();
}
/**//// <resumen>
/// Generar objeto de artículo a través de SqlDataReader
/// </summary>
/// <param nombre="dr"></param>
/// <devoluciones></devoluciones>
Artículo privado PopulateArticle (SqlDataReader dr)
{
Arte del artículo = nuevo artículo();
art.ID = Convert.ToInt32(dr["ID"]);
art.Autor = Convert.ToString(dr["Autor"]);
art.Topic = Convert.ToString(dr["Tema"]);
art.Content = Convert.ToString(dr["Contenido"]);
art.PostTime= Convert.ToDateTime(dr["PostTime"])
;
}
/**//// <resumen>
/// Agrega un artículo a la base de datos y devuelve el número del artículo.
/// </summary>
/// <param nombre="artículo"></param>
/// <returns>El número del artículo recién insertado</returns>
public int AddPost (artículo)
{
string sql = "Insertar EN " + _articledb +"(Autor,Tema,Contenido,Hora de publicación)"+
"VALOR(@autor, @topic, @content, @postTime) "+
"Seleccione @postID = @@IDENTIDAD";
SqlCommand cmd = nuevo SqlCommand(sql,_conn);
cmd.Parameters.Add("@postID",SqlDbType.Int,4);
cmd.Parameters["@postID"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@author",SqlDbType.NVarChar,100).Value = artículo.Author;
cmd.Parameters.Add("@topic",SqlDbType.NVarChar,400).Value = artículo.Topic;
cmd.Parameters.Add("@content",SqlDbType.Text).Value = artículo.Contenido;
cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value = artículo.PostTime;
cmd.ExecuteNonQuery();
artículo.ID = (int)cmd.Parameters["@postID"].Valor;
devolver artículo.ID;
}
}
}
El marco básico ya está disponible. Si queremos mostrar datos de la base de datos de artículos News_Artices en una página ASP.NET, solo necesitamos agregar un DataGrid o DataList y luego vincular la fuente de datos. Por ejemplo, agregue un DataGrid en Default.aspx, asígnele el nombre ArticlesDataGrid y agregue
código de programa
en el código de fondo Default.aspx.cs.
usando News_Articles.Data;
Y agregue el siguiente código en Page_Load:
código de programa
Page_Load vacío privado (remitente del objeto, System.EventArgs e)
{
// Pon el código de usuario para inicializar la página aquí
ArticleDb myArticleDb = nuevo ArticleDb();
miArtículoDb.Open();
Artículos de ArticleCollection = myArticleDb.GetArticles();
this.ArticlesDataGrid.DataSource = artículos;
si(!Página.IsPostBack)
{
this.ArticlesDataGrid.DataBind();
}
miArtículoDb.Close();
}
De esta manera se pueden leer todos los artículos de la base de datos de artículos.
Si necesita eliminar un artículo, agregue el siguiente código:
Código de programa
//Eliminar el artículo numerado 1
myArticleDb.DeleteArticle(1);
Inserte un artículo, el código es el siguiente:
código de programa
// Inserte un nuevo artículo sin especificar el número de artículo. SQL Server devolverá el número de artículo después de que el número de artículo se inserte correctamente.
Artículo nuevoArtículo = nuevo artículo();
newArticle.Author = "Se moverá";
newArticle.Topic = "Prueba insertando un nuevo artículo";
newArticle.Content = "Este es el contenido del artículo que escribí";
newArticle.PostTime = FechaHora.Ahora;
int artículoId = myArticleDb.AddPost(newArticle);
Actualice un artículo con el siguiente código:
código de programa
//Actualizar un artículo, tenga en cuenta que debe especificar el número de artículo
Actualización del artículoArtículo = nuevo artículo();
updateArticle.ID = 3; //Tenga en cuenta que debe especificar el número de artículo
updateArticle.Author = "Se moverá";
updateArticle.Topic = "Datos de actualización de prueba";
updateArticle.Content = "Este es el contenido del artículo que actualicé";
updateArticle.PostTime = FechaHora.Ahora;
myArticleDb.UpdateArticle(actualizarArtículo);
Lo anterior es solo un marco y hay muchos detalles sobre la implementación específica que no figuran en la lista. Pero según el marco anterior, puede escribir código más fácilmente para operaciones de bases de datos. Otra sugerencia es escribir la declaración SQL anterior para acceder a la base de datos como un procedimiento almacenado en la base de datos, como agregar un artículo:
Código de programa
Crear PROCEDIMIENTO AddPost
(
@ID int SALIDA,
@Autor nvarchar(100),
@Tema nvarchar(100),
@Contenido ntext,
@PostTime fecha y hora
)
COMO
Insertar INTO News_Articles(Autor, Tema, Contenido, PostTime) VALORES (@Author, @Topic, @Content, @PostTime);
Seleccione @ID = @@IDENTIDAD
IR
Apéndice 1: Campos de la base de datos News_Articles
del código del programa
describe si la longitud del tipo de datos puede ser nula
ID número de artículo int 4 no
Título del artículo del tema nvarchar 100 no
Autor autornvarchar 100 es
Contenido del artículo contenido ntext 16 No
Hora de publicación de PostTime fecha y hora 8 No
El valor predeterminado de PostTime se puede establecer en (getutcdate())
La instrucción SQL es
Crear TABLA [Artículos_noticias] (
[ID] [int] IDENTIDAD (1, 1) NO NULA,
[Tema] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL,
[Autor] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL,
[Contenido] [ntext] COLLATE Chinese_PRC_CI_AS NOT NULL,
[Hora de publicación] [fecha y hora] RESTRICCIÓN NO NULA [DF_News_Articles_PostTime] PREDETERMINADO (getutcdate())
) EN [PRIMARIO] TEXTIMAGE_ON [PRIMARIO]
IR
Apéndice 2: Descripción del código fuente del proyecto News_Articles: antes de abrir el archivo del proyecto News_Articles.csproj, debe configurar la ruta virtual News_Articles o cambiar la configuración en News_Articles.csproj.webinfo. Para un funcionamiento normal, se debe instalar SQL Server y se debe instalar la base de datos de artículos News_Articles. Hay archivos de texto SQL en el directorio raíz del código fuente del proyecto.