Como Crear un App.Config para una Aplicacion .NET Compact Framework

La actual versión del .NET Compact Framework (viene con Visual Studio .NET 2003) no ofrece la capacidad de acceder a un archivo de configuración App.Config como lo hace una aplicación .NET Windows Form.

Si deseas obtener la misma funcionalidad, simplemente carga el archivo de configuración en un XmlDocument y transforma el documento xml en una NameValueCollection. A partir de eso, puedes referenciar la colección AppSettings para recuperar el valor por el nombre de clave.

Revisemos el siguiente ejemplo.

Es importante anotar que necesitarás incluir el archivo App.Config en tu proyecto y configurar las propiedades del archivo para ser considerado Content (contenido).

Esto asegura que tu archivo sea incluido con la distribución.


App.Config de muestra

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <appSettings>
      <add key="Item1" value="value of item 1" />
      <add key="Item2" value="value of item 2" />
      <add key="Item3" value="value of item 3" />
   </appSettings>
</configuration>

Codigo de ejemplo (C#)

using System;
using System.Collections.Specialized;
using System.Xml;
using System.IO;

public class ConfigurationSettings
{

public static NameValueCollection AppSettings;

public static void LoadConfig()
{
try
{

string AppPath = Path.GetDirectoryName( Assembly.GetExecutingAssembly().GetName().CodeBase);
string ConfigFile = Path.Combine(AppPath,"App.config");

if(File.Exists(ConfigFile) == false)
{
System.Windows.Forms.MessageBox.Show("Config file does not exist");
Application.Exit();
return;
}

XmlDocument oXml = new XmlDocument();

oXml.Load(ConfigFile);

XmlNodeList oList = oXml.GetElementsByTagName("appSettings");

AppSettings = new NameValueCollection();

foreach(XmlNode oNode in oList)
{
foreach(XmlNode oKey in oNode.ChildNodes)
{
AppSettings.Add(oKey.Attributes["key"].Value, oKey.Attributes["value"].Value);
}
}

System.Windows.Forms.MessageBox.Show(ConfigurationSettings.AppSettings["Item1"]);

}
catch (Exception) { throw; }
}

}

Consulta sobre Optimización de Procedimientos Almacenados

Llegó un correo de un lector: Héctor Hoyos.



Buenas noches; soy una persona muy interesada en conocer como pruebo y optimizo un procedimiento almacenado y de acuerdo con el texto de su blog "Podemos empezar realizando una estadística de la ejecución del procedimiento almacenado, detallando ciclos de CPU utilizados, lecturas, escrituras, tiempo de duración,
observaciones, etc. no tengo la experiencia ni el conocimiento para realizar estas estadisticas, me puede orientar que y como ejecutar estas estadisticas.


Yo vivo en Colombia y me parece muy interesante su blog, del cual estoy aprendiendo bastante.


Cordial saludo,


Héctor A. Hoyos B.


Mi respuesta fué:

Hola Héctor:


En el Analizador de Consultas, en el menú Consulta, marcas la opción Mostrar Estadísticas de Cliente, y cuando ejecutes el procedimiento (en el mismo analizador de consultas), te mostrará las estadisticas de ejecución del procedimiento. Otra es Mostrar plan de ejecución. Ambas te darán estadisticas del procedimiento, que te permitirá optimizarlo.


Saludos,


Carlos
Animo a ustedes lectores a hacer preguntas, la verdad que el tiempo siempre es escaso, pero siempre trato de dar una respuesta. Hasta pronto.

Ejecutar una Tarea SQL mediante un Archivo por Lotes o Batch

Cada persona encargada de una base de datos va a llegar a la situación en que debe realizar tareas de mantenimiento como realizar backups de bases de datos, reindexar tablas y otras tareas similares.

Esas tareas idealmente deben ser programadas, y ellas son ejecutadas en una agenda programada. Pero en el caso que la tarea deba ser ejecutada a voluntad ("On Demand", bajo demanda) necesitará intervención humana, y la persona obviamente necesitará tener conocimientos técnicos para poder desarrollarla.

Entonces, el reto esta ahí, y es que podamos hacer que cualquier persona, tenga habilidades técnicas o no, pueda ejecutar dichas tareas.

Una forma seria utilizar un script VBS y utilizar DMO para ejecutar la tarea. Otra forma, y al parecer más sencilla es ejecutar un comando osql en un archivo por lotes o batch.

La utilidad osql permite ejecutar sentencias Transact-SQL, procedimientos de sistema y archivos script. Esta utilidad utiliza ODBC para comunicarse con el servidor.

PRIMER PASO:
Ver si el trabajo a realizar puede ser ejecutado utilizando osql. Abrimos una ventana de comandos y ejecutamos la siguiente sentencia osql en ella:

osql -S "NOMBRE_INSTANCIA_SERVIDOR" -E -Q"exec msdb.dbo.sp_start_job ' BACKUPTEST ' "


Aquí "NOMBRE_INSTANCIA_SERVIDOR" es el nombre de la instanacia Sql Server ejecutandose en la computadora y sobre la cual se va a ejecutar la tarea. "BACKUPTEST" es el nombre de la tarea que ejecutará el trabajo de mantenimiento deseado. Despues de ejecutar el comando notaras que el procedimiento almacenado de sistema 'sp_start_job' ejecuta la tarea deseada sobre la instancia del servidor elegida.

SEGUNDO PASO:
El siguiente paso es crear un archivo por lotes. Abre el Bloc de Notas y escribe los siguientes comandos:

ECHO ejecutando tarea
ECHO.
pause
osql -S "NOMBRE_INSTANCIA_SERVIDOR" -E -Q"exec msdb.dbo.sp_start_job ' BACKUPTEST ' "
ECHO tarea ejecutada
pause
CLS
EXIT


Guarda el archivo como "Tarea.bat".

Luego, el archivo por lotes está listo para ser utilizado. Solo se hace doble click sobre el archivo y el trabajo de mantenimiento se realizará, sin necesidad de tener conocimientos de SQL Server.