martes, 9 de noviembre de 2010

SQLServer. Extraer la fecha de un campo DateTime

Cuando buscas cómo hacerlo hay un montón de gente que utiliza el CONVERT, que formatea la fecha de múltiples maneras en función de un parámetro:

SELECT CONVERT(VARCHAR(10),<campofecha>,111)

El problema es que el resultado del CONVERT es una cadena, y si se quiere tratar como fecha hay que hacerle un segundo CAST a DateTime.

La manera "elegante" de resolverlo, y yo me huelo que bastante más eficiente, es la siguiente:

SELECT DATEADD(D, 0, DATEDIFF(D, 0, <campofecha>))

Hale!

miércoles, 20 de octubre de 2010

Crystal Report en ASP.NET: Se ha alcanzado el límite máximo de tareas de procesamiento de informes configuradas por el administrador del sistema

El amigo JoseMa ya encontró la solución a este problema:

"Se ha alcanzado el límite máximo de tareas de procesamiento de informes configuradas por el administrador del sistema"

En resumiendo:

a) o bien es un problema de liberar los objetos crystal que has creado, haciendo un close y un dispose en el form_unload

b) o bien, si lo del punto a) lo tienes resuelto, tu aplicación web recibe tantas peticiones simultáneas de impresión que llegas al límite de objetos crystal que el server puede tener en memoria, que son 75 por defecto. Para ampliarlo (usando vs2005):
HKEY_LOCAL_MACHINE\SOFTWARE\Crystal Decisions\10.2\Report Application Server\Server\PrintJobLimit

En el 2008 creo que cambia a
HKEY_LOCAL_MACHINE\SOFTWARE\BUSINESS OBJECTS\SUITE 12.0\REPORT APPLICATION SERVER\SERVER\Printability

lunes, 13 de septiembre de 2010

Lista de impresoras instaladas

Si lo que se quiere es simplemente una lista de nombres de las impresoras instaladas, pues vale con esto:

For Each printer As String In System.Drawing.Printing.PrinterSettings.InstalledPrinters
    MessageBox.Show(printer)
Next printer


Si lo que se pretende es un acceso más profundo a los objetos y sus propiedades, pues hay que leerse esto:

Retrieve a List of Installed Printers on the Network Using WMI, C# and VB.NET

viernes, 12 de febrero de 2010

Escribir en un archivo de log la cadena XML que recibe un webservice

Dim httpStream As Stream = Context.Request.InputStream

Dim longitud As Integer = httpStream.Length
Dim buffer(longitud) As Byte

httpStream.Seek(0, 0)
httpStream.Read(buffer, 0, longitud)

Dim cad As String = System.Text.ASCIIEncoding.ASCII.GetString(buffer)

Dim path As String = Server.MapPath(".") + "\log2.txt"

Dim sw As StreamWriter = New StreamWriter(path, True)
sw.WriteLine("->" & Date.Now.ToString & cad)
sw.Close()


Evidentemente debes tener permiso de escritura sobre el directorio donde quieras guardar el log.

jueves, 11 de febrero de 2010

VB y C# juntos en APP_CODE

Juntos pero no revueltos. Ese es el truco.

Si intentas tener en la carpeta APP_Code clases escritas en dos lenguajes diferentes el compilador te dice que na nay. Más concretamente, "The files 'xxx.cs' and 'xxx.vb' use a different language, which is not allowed since they need to be compiled together"

Para poder hacerlo debes ubicar el código escrito en un lenguaje en una carpeta, dejando el escrito en el otro en la raíz (o lo metes en otro directorio, lo que veas mejor). En mi caso dejo el VB en la raíz y meto las clases escritas en C# en el directorio APP_Code\APP_Code_CS. Una vez hecho esto, sólo hay que decirle al compilador que compile de manera separada la carpeta APP_Code_CS. Nos vamos al webconfig, a la sección "<compilation>" y escribimos:

<codeSubDirectories>
<add directoryName="App_Code_CS"/>
</codeSubDirectories>


Y a correr.