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();

miércoles, 29 de julio de 2009

Bindear una propiedad/metodo del code behind desde el aspx

Para bindear por ejemplo un texto de un label con un metodo o propiedad del codebehind primero declararemos dicho metodo:



public partial class SamplePage : System.Web.UI.Page
{
public String getText()
{
return "hola";
}
}


Luego en el aspx declaramos un control de la siguiente manera:


<div>
<asp:Label ID="lbl" runat="server" Text="<%# this.getText() %>" />
</div>


Luego debemos recordar ejecutar el metodo databind() de la pagina en el page_load


protected void Page_Load(object sender, EventArgs e)
{
this.DataBind();
}

lunes, 11 de mayo de 2009

Testeo Automatico de Guis

Para hacer testeo automatico de GUIS el producto que mas me gusto hast ahora fue
este

viernes, 24 de abril de 2009

Exportar un query a XML en SQL Server

Supongamos que tenemos la tabla

CREATE TABLE [dbo].[Permiso]
(
[IDRol] [int] NOT NULL,
[Permiso] [varchar](20),
)

Queremos hacer un select de todos los registros de la tabla y exportar el resultado de la consulta a XML

Las opciones son
1) Si queremos que exporte cada fila como un atributo ejecutamos


select * from Permiso FOR XML AUTO


y nos quedaria por ejemplo..







2) Si queremos que nos exporte cada fila como un elemento de xml


select * from Permiso FOR XML AUTO, ELEMENTS


y nos quedaria por ejemplo..



1
Planificar


2
Planificar


3
Planificar

martes, 21 de abril de 2009

Compartiendo un archivo entre dos proyectos

El escenario es el siguiente:

1) Tengo en visual studio una solucion "Solucion.sln"

2) Dentro de la solucion tengo dos proyectos

2.1) ProyectoA

2.2) ProyectoATests

3) El ProyectoATest tiene todos los unit test que se utilizan en el proyecto a


Hasta aqui todo bien, ahora quiero compartir un archivo entre ambos proyectos. Por ejemplo un archivo de scripts SQL o un archivo de configuracion

Una opcion que queremos evitar es duplicar el mismo archivo en ambos proyectos ya que al modificar uno tenemos que acordarnos de modificar el otro

Por lo tanto los pasos a seguir para evitar esto seria
1) Agregar el archivo al ProyectoA, supongamos que se llama scripts.sql

2) Ir al ProyectoATest

2.1) Poner Add..Existing Item..

2.2) Seleccionar el archivo scripts.sql del otro proyecto pero..

2.3) Antes de darle aceptar fijarse que el boton add tiene una flecha que apunta para bajo

2.4) Hacer click en esa flecha y presionar "Add as a link"


Voila... ahora estamos compartiendo el mismo archivo entre dos proyectos

miércoles, 18 de marzo de 2009

Agrupar en un asp:gridview

Para agrupar filas en un asp:gridview tenemos que programar el evento RowDataBound de la grilla y crear las rows agrupadora dinamicas en ese evento. Por ejemplo supongamos que agrupamos por la propiedad Proyecto de un objeto instancia de la clase Accion


private string campoAgrupador = string.Empty;
private int iColumnasAgregadas = 0;
protected void grdTareas_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.DataItem != null)
{
Accion accionActual = e.Row.DataItem as Accion;
if (accionActual.Proyecto != campoAgrupador)
{
GridViewRow rowAgrupadora = new GridViewRow(-1, -1, DataControlRowType.DataRow, DataControlRowState.Normal);
TableCell cell = new TableCell();
Label l = new Label();
l.Text = "Agrupo por "+accionActual.Proyecto;
cell.Controls.Add(l);
cell.ColumnSpan = 10;
rowAgrupadora.Cells.Add(new TableCell());
rowAgrupadora.Cells.Add(cell);
((Table)e.Row.Parent).Rows.AddAt(e.Row.RowIndex +1 +iColumnasAgregadas, rowAgrupadora);
campoAgrupador = accionActual.Proyecto;
iColumnasAgregadas++;
}
}
}

miércoles, 18 de febrero de 2009

Campos Auto Incrementales en SQL server

Si en SQL Server usamos campos auto incrementales enteros, luego de hacer el insert es probable que deseemos saber el valor de la clave generada por SQL Server.

Para ello luego de hacer el insert podemos ejecutar los siguientes SQL contra la base

Opcion 1:

SELECT @@Identity


Opcion 2:

SELECT SCOPE_IDENTITY()


En internet se recomienda usar la opcion 2, aunque a mi no me funciono y opté por la opcion 1.