lunes, 14 de diciembre de 2015

Non blocking Sleep Windows Forms

Non blocking Sleep
Windows Forms.
Código para hacer sleep (Thread.Sleeip) sin bloquear la interfaz gráfica.
Sin usar await ni Task.Delay
Usar expresiones lambda en lugar de delegates
C# wait for a while without blocking.
Wait some seconds without blocking UI execution
Without using await and task delay
use lambda expressions instead of delegates



private static void NoBlockingSleep(int interval) { bool bTimerStarted = true; System.Windows.Forms.Timer t = new System.Windows.Forms.Timer(); t.Interval = interval; t.Tick += (x, y) => { t.Stop(); bTimerStarted = false; }; t.Start(); while (bTimerStarted) { Application.DoEvents(); } }

jueves, 11 de febrero de 2010

Borrar la tabla asociada a una entidad con LinQ

El código para borrar la tabla de una entidad de LinQ (asumiendo que tenemo una referencia al dataContext en this.DataContext) sería:


public void DeleteTable() where T : class
{
Table table = this.DataContext.GetTable();
string tableName = table.ToString();
int tableNameStartIndex = tableName.IndexOf('(') + 1;
tableName = tableName.Substring(tableNameStartIndex, tableName.Length - tableNameStartIndex - 1);

this.DataContext.ExecuteCommand(String.Format("delete from {0}", tableName));
this.DataContext.ExecuteCommand(String.Format("DBCC CHECKIDENT ('{0}', RESEED, 0)", tableName));
this.DataContext.SubmitChanges();
}

StyleCop

Stylecop es una herramienta para verificar el código fuente de un proyecto contra un conjunto de reglas de estilo preestablecidas que definen buenas prácticas a la hora de escribir código fuente. Incluyen validaciones sobre el uso la identación, el uso de espacios, el uso de paréntesis, cuando abrir y cerrar llaves, etc. Ayuda mucho a lograr un código fuente mucho más unificado.

El stylecop se puede bajar de aqui

Si deseáramos que el StyleCop nos arroje errores cada vez que encuentra una violación de estilo tenemos que abrir nuestro archivo csproj y agregar las siguientes lineas. En la seccion PropertyGroup agregar el tag StyleCopTreatErrorsAsWarnings



...
false




Luego agregamos un import que haga referencia al archivo msbuild predefinido del Stylecop de la siguiente manera


Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />


Hay que acordarse que si se decide ignorar alguna regla del StyleCop (y sobre todo si se tiene un ambiente de integración continua) habría que subir al svn (o el repositorio de código que se esté usando) el archivo Settings.StyleCop que se encuentra en el mismo directorio que el proyecto.

viernes, 22 de enero de 2010

Un ejemplo de MSBuild

Asi podría quedar nuestro archivo MSBUILD


.




























Properties="Configuration=Debug;Platform=Any CPU;" Targets="Clean"/>



Properties="Configuration=Debug;Platform=Any CPU;"/>



DestinationFiles="$(WorkingDirectory)\app.config" />




Files="@(LocalBuildBeginDBScripts)" ContinueOnError="false" />



Assemblies="@(TestAssemblyData)"
OutputXmlFile="$(ArtifactsDirectory)\nunit-results-data.xml"
WorkingDirectory="$(WorkingDirectory)\Project.Tests\bin\Debug"
ToolPath="C:\Program files\NUnit 2.4.7\bin"/>




Podemos tener otro archivo que extienda el comportamiento del anterior y sea por ejemplo







C:\...\trunk C:\...\trunk\Build
C:\Program files\NUnit 2.4.7\bin\nunit-console.exe




Server=localhost;user id=sa;password=sa;Trusted_Connection=False;


Server=localhost;user...;database=DB;



miércoles, 23 de septiembre de 2009

Pasos para hacer backup/restore de una base MsSQL con el Microsoft SQL Management Studio

Hacer copia local de una base existente

1 - Elegir la base
2 - Tasks... Backup
3- En BackupTo agregar el nombre del archivo de backup
4- Realizar el Backup

Para restaurar una base de datos de un backup
1- Pararse en las carpeta Database
2- Boton derecho... Restore Database
3- Especificarle el nombre de la base de datos
4- Poner From Device y elegir el archivo de backup
5- En la parte de options poner un path a los archivos que se generan, la base y el log
6- Presionar OK.

lunes, 14 de septiembre de 2009

Traducir de Visual Basic a C#

Si necesiamos traducir un codigo desde Visual Basic a C# (y viceversa) el siguiente recursos puede resultarnos de suma utilidad

http://www.carlosag.net/Tools/CodeTranslator/

martes, 11 de agosto de 2009

Creando scripts de una BD con SQLDMO

SQLDMO (SQL Distributed Management Objects) son un conjunto de objetos COM para administrar una base de datos SQL Server. Nos permiten llevar a cabo un conjunto de funcionalidades como las que generalmente hacemos desde el Management Studio. En particular veremos como generar los scripts de generacion de la base de datos.

Para poder utilizar esta tecnologia primero en un proyecto cualquiera debemos agregar una referencia a los objetos COM. Para ellos lo buscamos en la solapa COM que aparece en el dialogo al hacer click en la opcion "Add References" de la carpeta "References"



Luego podemos conectarnos contra un servidor de SQL server de la siguiente manera


SQLDMO.SQLServer server = new SQLServer();
server.Connect("localhost\\sql2000","sa","sa");


Luego obtenemos una instancia de la base con la que nos queremos conectar


SQLDMO.Database database = (SQLDMO.Database)server.Databases.Item
("baseQueQuiero",null);


Estamos a un simple ForEach de listar las tablas de la base de datos


List<SQLDMO.Table> tablasPendienteProcesar = new List<SQLDMO.Table>();

foreach (Table tabla in database.Tables)
{
tablasPendienteProcesar.Add(tabla);
}


A cada tabla le podemos pedir el un script con el CREATE sql necesario para crear su estructura. Aqui agregaremos los script a un stringBuilder y luego los mostraremos en un RichTextBox



StringBuilder sb = new StringBuilder();

foreach (SQLDMO.Table tabla in tablasProcesadas)
{
sb.Append(tabla.Script(SQLDMO_SCRIPT_TYPE.SQLDMOScript_Default, null, null, SQLDMO_SCRIPT2_TYPE.SQLDMOScript2_Default));
}

this.richTextBox1.Text += sb.ToString();



Por ultimo nos desconectamos del servidor



server.DisConnect();