Cómo: Implementar una clase auxiliar de DataSet CREATE TABLE en C# .NET

Seleccione idioma Seleccione idioma
Id. de artículo: 325938 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo paso a paso se describe cómo implementar y cómo utilizar una clase DataSetHelper que incluye código de ejemplo para crear una tabla de una lista delimitada por comas de nombres de campo y tipos de datos. En este artículo incluye un segundo método para que también puede especificar las columnas de clave principal.

La clase DataSetHelper incluye una variable de miembro de DataSet . Opcionalmente, puede asignar un objeto DataSet existente a la variable de miembro de DataSet . Si la variable miembro apunta a un DataSet válido, los objetos DataTable que crea el método CreateTable se agregan al DataSet . En cualquier caso, la llamada al método devuelve una referencia al objeto DataTable .

Para obtener más información acerca de los objetos DataSet , haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
313485INFO: Guía para DataSet, DataView y DataViewManager

Requisitos

En la lista siguiente se describe el hardware, el software, la infraestructura de red y los service pack recomendados que se necesitarán:
  • Microsoft Windows XP, Windows 2000 o Windows NT 4.0 Service Pack 6a
  • Microsoft Visual Studio .NET
En este artículo se supone que está familiarizado con los temas siguientes:
  • Sintaxis de Visual Basic .NET
  • Fundamentos y sintaxis de ADO.NET

Clase DataSetHelper Shell

El código en esta sección declara la clase de shell para que todos los artículos de DataSetHelper agregar métodos y variables miembro.
  1. Inicie Visual Studio NET..
  2. En el menú archivo , seleccione nuevo y, a continuación, haga clic en proyecto .
  3. En el cuadro de diálogo Nuevo proyecto , haga clic en Proyectos de Visual C# en Tipos de proyecto y, a continuación, haga clic en Biblioteca de clases en plantillas .
  4. En el cuadro nombre , escriba DataSetHelper .
  5. Reemplace el código de la clase con el siguiente código:
    public class DataSetHelper
    {
    	public DataSet ds;
    	public DataSetHelper(DataSet DataSet)
    	{
    		ds = DataSet;
    	}
    	public DataSetHelper()
    	{
    		ds = null;
    	}
    }
    					
    puede utilizar las dos sobrecargas del constructor para crear una instancia de la clase con o sin una referencia a un DataSet válido. Para una clase que contiene una referencia a un DataSet válido, los objetos DataTable que devuelven los métodos también se agregan automáticamente al DataSet .

Método CreateTable (opción 1)

Esta sección contiene el código para el principal método CreateTable .

Esta es la convención de llamada ejemplo para este método CreateTable :
DataTable dt = dsHelper.CreateTable("CT1", "Name String, ID Int32 Required, Field3 String Name + ID");
				
este código crea una nueva DataTable con un TableName de TestTable y tres campos (Name, ID y Field3). Los campos nombre y Field3 son del tipo System.String y el campo ID es un campo obligatorio y es de tipo System.Int32 . Field3 contiene el resultado de la expresión "Nombre + ID".

Utilice la siguiente sintaxis para especificar campos en la lista de campos:
fieldname datatype[ REQUIRED|expression], ...
				
  • Los tipos de datos que admiten son cualquier miembro del espacio de nombres System , como el Int32 o el miembro de cadena . No se puede utilizar tipos de datos específicos del lenguaje, tales como int o Integer . También, no especifique el espacio de nombres System explícitamente en la lista de campos; este espacio de nombres está implícita.
  • De forma predeterminada, todos los campos son opcionales. Agregar la palabra necesarias después de que el tipo de datos para no permitir valores NULL en el campo.
  • La expresión es cualquier expresión válida que admite la clase DataColumn .
Para llamar a este método CreateTable , agregue el siguiente método a la clase DataSetHelper que creó en la sección "":
public DataTable CreateTable(string TableName, string FieldList)
{	
	DataTable dt = new DataTable(TableName);
	DataColumn dc;
	string[] Fields= FieldList.Split(',');    
	string[] FieldsParts;
	string Expression;
	foreach(string Field in Fields)
	{
		FieldsParts = Field.Trim().Split(" ".ToCharArray(), 3); // allow for spaces in the expression
		// add fieldname and datatype			
		if (FieldsParts.Length == 2)
		{	
			dc = dt.Columns.Add(FieldsParts[0].Trim(), Type.GetType("System." + FieldsParts[1].Trim(),true,true));
			dc.AllowDBNull = true;
		}
		else if (FieldsParts.Length == 3)  // add fieldname, datatype, and expression
		{
			Expression = FieldsParts[2].Trim();
			if (Expression.ToUpper() == "REQUIRED")
			{				
				dc = dt.Columns.Add(FieldsParts[0].Trim(), Type.GetType("System." + FieldsParts[1].Trim(), true, true));
				dc.AllowDBNull = false;
			}
			else
			{
				dc = dt.Columns.Add(FieldsParts[0].Trim(), Type.GetType("System." + FieldsParts[1].Trim(), true, true), Expression);
			}
		}
		else
		{
			throw new ArgumentException("Invalid field definition: '" + Field + "'.");
		}
	}
	if (ds != null) 
	{
	        ds.Tables.Add(dt);
	}
	return dt;
}
				

Método CreateTable (opción 2)

Esta sección contiene el código para un segundo método CreateTable que es el mismo que el primer método excepto en que este código agrega una lista de campos de clave delimitada por comas. Este método llama al método CreateTable primero para crear la DataTable , analiza la lista de campo de clave y, a continuación, establece la propiedad DataTable.PrimaryKey .

Esta es la convención de llamada ejemplo para este método CreateTable :
DataTable dt = dsHelper.CreateTable("CT2","Name String, ID Int32 Required, Field3 String Name + ID", "ID");
				
este código crea una nueva DataTable con un TableName de TestTable y tres campos. En este código, el campo ID es la clave principal. Puede especificar más de un nombre de campo clave (por ejemplo, ID y nombre).

Para llamar a este método CreateTable , agregue el siguiente método a la clase DataSetHelper que creó en la sección "":
public DataTable CreateTable(string TableName, string FieldList , string KeyFieldList)
{
	DataTable dt = CreateTable(TableName, FieldList);
	string[] KeyFields = KeyFieldList.Split(',');
	if (KeyFields.Length > 0)
	{
		DataColumn[] KeyFieldColumns= new DataColumn[KeyFields.Length];								        int i;
		for (i = 1; i==KeyFields.Length-1 ; ++i)
		{
		        KeyFieldColumns[i] = dt.Columns[KeyFields[i].Trim()];
		}
		dt.PrimaryKey = KeyFieldColumns;	
	}
	return dt;  // You do not have to add to DataSet - The CreateTable call does that
}
				

Probar la aplicación

  1. Guarde y, a continuación, compile la clase DataSetHelper que creó en las secciones anteriores.
  2. Siga estos pasos para crear una nueva aplicación de Windows de Visual C#:
    1. Inicie Visual Studio NET..
    2. En el menú archivo , seleccione nuevo y, a continuación, haga clic en proyecto .
    3. En el cuadro de diálogo Nuevo proyecto , haga clic en Proyectos de Visual C# en Tipos de proyecto y, después, haga clic en Aplicación para Windows en plantillas .
  3. En el Explorador de soluciones, haga clic con el botón secundario en la solución y, a continuación, haga clic en Agregar proyecto existente . Agregue el proyecto DataSetHelper.
  4. En el menú proyecto , haga clic en Agregar referencia .
  5. En el cuadro de diálogo Agregar referencia , haga clic en la ficha proyectos y, a continuación, agregue una referencia al proyecto DataSetHelper a la aplicación Windows Forms.
  6. En el Diseñador de formulario, arrastre dos controles Button y un control DataGrid desde el cuadro de herramientas al formulario. Los nombres los botones btnCreate1 y btnCreate2 . Mantenga el nombre predeterminado para el control DataGrid (DataGrid1).
  7. En el código de formulario, agregue la siguiente instrucción Imports al principio de la ventana código:
    using System.Data
    					
  8. Agregue las siguientes declaraciones de variables a la definición del formulario:
    	DataSet ds;
    	DataSetHelper dsHelper;
    					
  9. Agregue el código siguiente al evento Form.Load :
            ds = new DataSet();
    	dsHelper = new DataSetHelper(ds);
    					
  10. Agregue el código siguiente al evento btnCreate1.Click :
    	DataTable dt = dsHelper.CreateTable("CT1", "Name String, ID Int32 Required, Field3 String Name + ID");
    	dt.Rows.Add(new Object[] {"Jones", 4});
    	dt.Rows.Add(new Object[] {"Jones", 8});
    	dt.Rows.Add(new Object[] {"Thompson", 42});
    	dataGrid1.SetDataBinding(ds,"CT1");	
    					
  11. Agregue el código siguiente al evento btnCreate2.Click :
    	DataTable dt = dsHelper.CreateTable("CT2","Name String, ID Int32 Required, Field3 String Name + ID", "ID");
    	dt.Rows.Add(new Object[] {"Tom Jones", 45});
    	dt.Rows.Add(new Object[] {"Will Smith", 58});
    	dt.Rows.Add(new Object[] {"Davey Jones", 84});
    	dt.Rows.Add(new Object[] {"Rob Thompson", 42});
    	dataGrid1.SetDataBinding(ds, "CT2");
    
    					
  12. Ejecutar la aplicación y, a continuación, haga clic en cada uno de los botones. Observe que el control DataGrid está relleno con las tablas y los datos desde el código.

    Nota : puede hacer clic sólo en los botones de una vez. Si hace clic en cualquiera de estos botones más de una vez, recibirá un mensaje de error que intenta agregar la misma tabla two times.

Ideas de mejora

Puede ampliar el analizador para que pueda especificar una longitud máxima para las columnas de la cadena. Por ejemplo, puede utilizar la siguiente sintaxis:
String(50)
				
agregar una condición para comprobar si el tipo de datos comienza con "String(". En caso afirmativo, utilice el número para establecer la propiedad MaxLength del objeto DataColumn .

Solución de problemas

  • La expresión no debe contener una coma, incluso si la coma está incrustada en las comillas. Por ejemplo, la expresión siguiente no es válida:
    LastName+", "+FirstName
    					
    ésta es una limitación de la técnica de análisis que se utiliza. Puede utilizar una técnica más sofisticada de análisis para que se pueden incrustar comas entre comillas. Para evitar esta limitación, agregue la expresión problemática una vez creada la tabla.

  • Si hace clic en un botón de más de una vez, la misma tabla se agrega dos veces al DataSet , que da como resultado una excepción. Para evitar este problema, puede agregar código a la aplicación de prueba para comprobar si ya existe un DataTable con el mismo nombre. Como alternativa, puede crear la clase DataSetHelper sin una referencia a un DataSet y a continuación, enlazar la propiedad DataGrid.DataSource directamente a la variable dt en lugar de mediante la llamada de método SetDataBinding .

Propiedades

Id. de artículo: 325938 - Última revisión: jueves, 4 de septiembre de 2003 - Versión: 2.3
La información de este artículo se refiere a:
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
Palabras clave: 
kbmt kbhowtomaster kbsystemdata KB325938 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 325938

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com