miércoles, 17 de noviembre de 2010

Obtener stored procedures modificados en los ultimos n dias.

Ejemplo para 7 dias:
SELECT name,modify_date
FROM sys.objects
WHERE type = 'P'
AND DATEDIFF(D,modify_date, GETDATE()) < 7
ORDER BY modify_date DESC

sábado, 23 de octubre de 2010

Creando o modificando datos con SQLite

SQLite posee un comando que permite en una sola sentencia crear o modificar datos de una tabla, con la condición que posea una clave primaria o indice único (esto ultimo lo tengo que verificar)
Ejemplo:

var parameters = new List<sqliteparameter>
    {
    new SQLiteParameter("campo1", "valorCampo1"),
    new SQLiteParameter("campo2", "valorCampo2"),
    new SQLiteParameter("campo3", "valorCampo3"),
    new SQLiteParameter("campo4", "valorCampo4"),
    new SQLiteParameter("campo5", "valorCampo5"),
    new SQLiteParameter("Fecha", DateTime.Now)
    };
var query = new StringBuilder();
query.AppendLine("INSERT OR REPLACE INTO ");
query.AppendLine("Tabla(campo1,campo2,campo3,campo4,campo5,Fecha) ");
query.AppendLine("VALUES(@campo1,@campo2,@campo3,@campo4,@campo5,@Fecha)");
return query.ToString();

sábado, 3 de julio de 2010

Obtener datos de una planilla excel usando un OleDbDataAdapter

Requisitos: 
La planilla debe estar guardada en formato excel 2003, el nombre de la hoja no debe superar los 8 caracteres.

var file = @"F:\1.xls";
var cs = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties='Excel 8.0;HDR=NO;IMEX=1;'", file);

var adapter = new OleDbDataAdapter("SELECT * FROM [Hoja1$]", cs);
var ds = new DataSet();
adapter.Fill(ds);
DataTable data = ds.Tables[0];

foreach (DataRow dr in data.Rows)
{
        //Hago algo con los datos
}

sábado, 10 de octubre de 2009

Usando HttpModules y HttpHandlers

Muchas veces necesitamos realizar tareas antes de que una pagina sea solicitada [es comun realizar conteos de estadisticas, validacion de permisos,etc]. Tenemos dos maneras de injectar logica al pipeline request: HttpHandlers y HttpModules.
HttpModule 
Podemos ver al HttpModule como una forma de injectar logica basada en eventos. Cuando un cliente solicita un recurso se inica un pipeline request que dispara una serie de eventos.
  • AcquireRequestState   
  • AuthenticateRequest   
  • AuthorizeRequest   
  • BeginRequest   
  • Disposed   
  • EndRequest   
  • Error   
  • PostRequestHandlerExecute   
  • PreRequestHandlerExecute   
  • PreSendRequestContent   
  • PreSendRequestHeaders   
  • ReleaseRequestState   
  • ResolveRequestCache   
  • UpdateRequestCache   
Un HttpModule no es mas que una clase que implementa la interfaz IHttpModule, que tiene los siguientes metodos [Init y Dispose] requeridos. Dentro del metodo Init recibimos un parametro HttpApplication, en el que tenemos el estado actual del sitio, este es ejecutado antes que cualquier evento asociado al recurso que se esta solicitando, de manera que es el lugar en el que nos subscribiremos a los eventos que necesitemos manejar.
Registrando un HttpModule
<httpmodules>
<add type="classname, assemblyname" name="modulename" />
<httpmodules>

viernes, 2 de octubre de 2009

Desactivando constraints SQL Server

Desactivar todas las Constraints
exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'

Desactivar todos los Triggers
exec sp_MSforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'

Activar todas las Constraints soo
exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'

Activar todos los Triggers
exec sp_MSforeachtable 'ALTER TABLE ? ENABLE TRIGGER ALL'

Esto es util para limpiar el contenido una base de datos, evitando que sql server valide las claves foraneas, ejecute triggers al eliminar registros, etc. Ideal para entornos de desarrollo o migracion, no recomendado para entornos en produccion.

Fuente: Foro SQL Server Magazine

sábado, 30 de mayo de 2009

Configurando WCF sin autenticacion

Quitar la autenticación nos permite realizar pruebas de funcionalidad sobre el servicio, ya que es la forma mas simple de configurarlo.
Para hacerlo configuramos el servicio en modo de seguridad None, desactivando la seguridad el endpoint a través de un binding que tenga el modo de seguridad en None).
Agregar dentro de la colección bindings lo siguiente,
<basicHttpBinding>
<binding name="httpconfig" >
<security mode="None"></security>
</binding>
</basicHttpBinding>
</bindings>
y modificar el del servicio de esta forma
<endpoint address="" binding="basicHttpBinding" contract="UpdateService.IUpdateService" bindingConfiguration="httpconfig">
Del lado del servidor los servicios se encuentran entre los tags services y del lado del cliente dentro de los tags client.

viernes, 29 de mayo de 2009

Como poner en cero la parte de hora de una variable o columna en SQL Server

DATEADD(dd, 0, DATEDIFF(dd, 0, **FECHA**))
Da como resultado:
SELECT GETDATE()
2009-05-29 16:07:18.373
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
2009-05-29 00:00:00.000
Probado en SQL Server 2005