Entradas en la etiqueta ‘.NET’

Npgsql2 Beta 3

Acaban de anunciar una nueva beta del conector libre de .NET para PostgreSQL, el cual trae algunas mejoras de rendimiento y algunas novedades, entre las cuales están:

  • Soporte para conexiones con autenticación integrada de Windows, esta característica naturalemente se debe a que PostgreSQL 8.3 agregó esta funcionalidad para la versión de Windows. Lo único que se tiene que hacer para usar este tipo de autenticación es agregar Integrated Security=true a la cadena de conexión
  • Soporte para el manejo de arreglos unidimensionales y multidimensionales:
    NpgsqlCommand d = new NpgsqlCommand();
    
    Int32[] a = new Int32[2];
    
    a[0] = 4;
    a[1] = 2;
    
    NpgsqlCommand command = new NpgsqlCommand("select :arrayParam", conn);
    
    command.Parameters.Add(new NpgsqlParameter("arrayParam", NpgsqlDbType.Array | NpgsqlDbType.Integer));
    
    command.Parameters[0].Value = a;
  • Nuevos tipos de datos para fechas que soportan tiempos que están fuera del rango 0001-01-01T00:00:00 - 9999-12-31T23:59:59.
  • Mejoras de rendimiento y corrección de funcionalidades de la clase NpgsqlDataReader.
  • Soporte para CommandBehavior.SequentialAccess
  • El único valor que podrá tomar client_encoding es UTF-8 debido a problemas que se presentan usando otras codificaciones. No estoy seguro del impacto que vaya a tener esto en aplicaciones existentes, pero habrá que hacer las pruebas respectivas para evitar problemas. :)
  • Soporte para añadir un valor a search_path desde la cadena de conexión.

Tags: , ,

Para los que puedan estar interesados, Misión Géminis 48 hs. es un concurso de Microsoft para…

… demostrar en 2 etapas qué tanto sabes acerca de .Net y PHP. Durante la primera etapa deberás responder una serie de preguntas de selección múltiple sobre estos lenguajes de programación. Los participantes que contesten correctamente todo el cuestionario, con la posibilidad de múltiples intentos, podrán pasar a la segunda etapa – La Misión. Allí deberás estar preparado para el reto de desarrollar una aplicación web funcional, un sistema de Control Epidemiológico basado en PHP, y migrarla a ASP.NET. Tendrás sólo 48 horas para hacerlo, y los primeros 48 que lo hagan estarán participando por increíbles premios. Los 3 ganadores designados por especialistas calificados recibirán U$D 1.000, U$D 800 y U$D 400, respectivamente.

Para mayor información revisen la página del concurso.

#Permalink Comentarios (2) .NET, Microsoft, Miniposts, PHP

Ejecutar sentencias T-SQL durante la instalación de aplicaciones .NET

Anteriormente usaba un método algo “brusco” para conseguir crear la base de datos y el esquema correspondiente durante la instalación de una aplicación. Sin embargo, hace poco acabo de enterarme a través de un blog de una forma más elegante de hacer esto para base de datos SQL Server; lo único que se necesita es crear un instalador personalizado y hacer uso de los ensamblados que provee SQL Server Management Objects:

public class SqlScriptInstaller : Installer
{
    private readonly string sqlScript_;

    public SqlScriptInstaller(string sqlScript)
    {
        this.sqlScript_ = sqlScript;
    }

    public SqlScriptInstaller(Stream sqlStream)
    {
        using (StreamReader sr = new StreamReader(sqlStream))
        {
            this.sqlScript_ = sr.ReadToEnd();
        }
    }

    public override void Install(IDictionary stateSaver)
    {
        string connectionString = this.Context.Parameters["ConnectionString"];

        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            ServerConnection serverConn = new ServerConnection(conn);
            Server sqlServer = new Server(serverConn);
            sqlServer.ConnectionContext.ExecuteNonQuery(this.sqlScript_);
        }

        base.Install(stateSaver);
    }
}

El script que acompañe a la aplicación puede incluir múltiples sentencias Transact-SQL (incluyendo la sentencia GO).

Tags: , , ,

Versión final de Visual Studio 2008

Al parecer la versión final (RTM) de Visual Studio 2008 ya está disponible para aquellos que cuentan con suscripción a MSDN.

Visual Studio 2008

Entre las novedades que vienen con esta versión:

  • Aparte de las versiones express, estará disponible Visual Studio Shell 2008, que básicamente permite implementar nuevos entornos de desarrollo integrados.
  • Multitargeting, permite crear aplicaciones que usen .NET Framework 2.0, 3.0 ó 3.5
  • Mejoras en los lenguajes C# 3.0 y VB 9.0
  • LINQ
  • Soporte nativo para ASP.NET Ajax y toda la gama de controles de ASP.NET 3.5. Mejoras en la depuración e intellisense de javascript y CSS.

Para más detalles de las novedades de esta versión les remito al siguiente blog.

Fuente: Microsoft UK Developer Tools Team.

Tags: , , , ,

Generar backups de bases de datos MySQL desde .NET

En general prefiero realizar los backups desde scripts, pero muchas veces esta tarea se debe realizar desde la misma aplicación. Algo a tomar muy en cuenta si opta por este camino, es que los backups — en lo posible — deben ser generados con las herramientas que el motor de base de datos trae para este fin.

En los ejemplos se muestra el uso de mysqldump y la clase Process, que según MSDN proporciona acceso a procesos locales y remotos, y permite iniciar y detener procesos del sistema local:

public void Backup(string  args)
{
	ProcessStartInfo psi = new ProcessStartInfo(ConfigurationManager.AppSettings["MysqlDump"], args);
	string filename = Path.Combine(workingDir, DateTime.Now.ToString(@"yyyy-MM-dd.\sql"));
	
	using (StreamWriter writer = new StreamWriter(filename, false, Encoding.UTF8))
	{
		using(Process process = new Process())
		{
			psi.CreateNoWindow = true; // Evita que el proceso se inicie en una nueva ventana.
			psi.UseShellExecute = false; // Evita que se use el shell del sistema operativo para iniciar el proceso.
			psi.RedirectStandardOutput = true; // Escribir la salida en Process.StandarOuput
			psi.StandardOutputEncoding = Encoding.UTF8; // Codificación de los datos de salida
	
			process.StartInfo = psi;
			process.OutputDataReceived += delegate(object sender, DataReceivedEventArgs e)
			{
				writer.WriteLine(e.Data);
			};
	
			process.Start();
			process.BeginOutputReadLine(); // Lectura asincrónica del stream de salida
			process.WaitForExit(); // Esperar a que el proceso termine.
		}
	}
}

Aunque en el código mostrado es más sencillo realizar algún proceso sobre los datos generados, hay que tener muy en cuenta la codificación de los datos en los backups, puesto que por un descuido se puede generar fácilmente basura.

Si se quiere evitar estos problemas de codificación, se podría usar algo como:

public void Backup(string args)
{
    string filename = Path.Combine(workingDir, DateTime.Now.ToString(@"yyyy-MM-dd.\sql"));
    ProcessStartInfo psi = new ProcessStartInfo("cmd.exe",
                                                string.Format("/c \"\"{0}\" {1} > \"{2}\"\"",
                                                              ConfigurationManager.AppSettings["MysqlDump"], args,
                                                              filename));

    psi.CreateNoWindow = true;
    psi.UseShellExecute = false;

    using (Process process = new Process())
    {
        process.StartInfo = psi;
        process.Start();
        process.WaitForExit();
    }
}

En fin, usar uno u otro método va a depender de los requerimientos de la aplicación.

Tags: , , , ,