lunes, 27 de abril de 2009

Trabajar con Schemas en SQL Server 2005

Los schemas, son muy utiles para controlar y separar las tablas en grupos o categorias y hacer mas facil su uso y localizacion , entre otras utilidades existente, en este caso nos centraremos en como crear y pasar las tablas del dbo a los schemas creados.

Teniendo como base datos de prueba DB_TEST que contiene las siguientes tablas: dbo.Cliente y dbo.Proveedor



Luego procedemos a crear los schemas Ventas y compra





El mismo proceso para el schema Compras

Luego comprobamos los schemas creados


Ahora el paso a seguir es traspasar o transferir el schema dbo (default) al los schemas ya creados, mediante las siguiente intrucción:

Comprobación de los cambios de shema

Ahora para poder consultar las tablas con sus nuevos schemas seria de la siguiente forma:





Restaurar Backups SQL Server 2005

Aqui, una muestra de codigo para la restauración de backups mediante script sql

USE master;–Make sure the database is using the simple recovery model.ALTER DATABASE AdventureWorks SET RECOVERY SIMPLE;GO– Back up the full AdventureWorks database.BACKUP DATABASE AdventureWorks TO DISK = ‘Z:\SQLServerBackups\AdventureWorks.bak’WITH FORMAT;GO–Create a differential database backup.BACKUP DATABASE AdventureWorks TO DISK = ‘Z:\SQLServerBackups\AdventureWorks.bak’WITH DIFFERENTIAL;GO–Restore the full database backup (from backup set 1).RESTORE DATABASE AdventureWorks FROM DISK = ‘Z:\SQLServerBackups\AdventureWorks.bak’WITH FILE=1, NORECOVERY;–Restore the differential backup (from backup set 2).RESTORE DATABASE AdventureWorks FROM DISK = ‘Z:\SQLServerBackups\AdventureWorks.bak’WITH FILE=2, RECOVERY;GO

la fuente esta en :

http://msdn.microsoft.com/es-es/library/ms186216.aspx

sábado, 28 de febrero de 2009

Generador de Codigo GenCode EMSV 2009

Esta version esta mas completa y mejorada ya que solamente nos conectamos al servidor y tenemos a disposicion todas las bases de datos para generar.
luego nos conecta y nos muestra un treeview con las bases de datos disponibles y tambien nos podemos conectar a otro servidor y generar codigo sin problemas

Al seleccionar una tabla podemos ver sus campos, tipos de datos y los controles que se van a usar en la programación
Luego procedemos a generar codigo:


Luego aqui podemos observar que los controles definidos para la tabla se generar en codigo.

Despues las opciones de configurar las clases y stored procedures las tenemos de forma diferente pues ya no es necesario agregarla como proyecto, si no que esta como configuracion que se agrega a un combo para seleccionar y tambien dar mantenimiento a los controles a usar para las tablas




Generador de Codigo GenCode EMSV 2008

Hola amigos, aqui les presento una versión del generador de codigo para C#, VB net y SQL. esta es la version 2008.
Aqui se teniene que crear un proyecto y configurar los spacios de nombres, las clases y los stored procedure por cada base de datos que quisieramos generar codigo.
Aqui nos conectamos a la base de datos y luego definimos las caracteristicas del proyecto

Luego una vez conectados seleccionamos la tabla definimos los campos y empezamos a generar codigo. Aca les pongo 2 ejemplos una entidad en C# y un Stored Procedure, y tambien soporta la caracteristica de generar el cs y el stored procedure en la base de datos



viernes, 6 de febrero de 2009

Parametros con Reporting Services

Aca le mando la forma de enviar parametros a un informe de reporting Services



List parameter = new List();
parameter.Add(new ReportParameter("pIDCompania", AppSettings.IDCompania.ToString()));
parameter.Add(new ReportParameter("IDEmpleado", this.cboIDEmpleado.SelectedValue.ToString()));
parameter.Add(new ReportParameter("IDProyecto", this.cboIDProyecto.SelectedValue.ToString()));
parameter.Add(new ReportParameter("pApeNom", this.cboIDEmpleado.Text));
parameter.Add(new ReportParameter("pProyecto", this.cboIDProyecto.Text));
viewReport.ReportParameter = parameter;

sábado, 31 de enero de 2009

LADP con C#



Cuentas veces hemos tenido la necesidad de conectarnos al Active Directory y obtener los usuarios definidos en el servidor, para poder usarlos en nuestras aplicaciones en diferentes formas y la mas usual es en la seguridad para validar usuarios, les presento aqui un codigo sencillo que encontre en la red y que me sirvio mucho y lo publico para que lo pueden usar y que les de ideas para que entren mas a fondo en este tema de mucho interes.

using System.Security.Principal;
using System.DirectoryServices;
using System.Net.NetworkInformation;



namespace AS.Utilities
{
public class ActiveDirectory
{
public enum LDAPFilterType
{
UsersAndGroups,
OnlyUsers,
OnlyGroups
}
public static string
getLDAPFilterString(LDAPFilterType Type, string Filter)
{
string FilterByName = "(samAccountName=*{0}*)";
string f = string.Empty;
switch (Type)
{
case LDAPFilterType.OnlyUsers:
f = "(&(objectCategory=person)(objectClass=user){0})";
break;
case LDAPFilterType.OnlyGroups:
f = "(&(objectCategory=Group){0})";
break;
case LDAPFilterType.UsersAndGroups:
f = "((&(objectCategory=person)(objectClass=user){0})(&(objectCategory=Group){0}))";
break;
}
if (Filter == string.Empty)
{
return string.Format(f, string.Empty);
}
else
{
return string.Format(f, string.Format(FilterByName, Filter));
}
}
public static string
getDomainName()
{
return IPGlobalProperties.GetIPGlobalProperties().DomainName;
}
public static string
getLDAPDomainName(string domainName)
{
StringBuilder sb = new StringBuilder();
string[] dcItems = domainName.Split(".".ToCharArray());
sb.Append("LDAP://");
foreach (string item in dcItems)
{
sb.AppendFormat("DC={0},", item);
}
return sb.ToString().Substring(0, sb.ToString().Length - 1);
}
public static List
getUserLDAPProperties(string LDAPURL)
{
List properties = new List();
DirectoryEntry entries = new DirectoryEntry(LDAPURL);
DirectorySearcher searcher = new DirectorySearcher(
entries, "(&(objectCategory=person)(objectClass=user))");
try
{
foreach (SearchResult result in searcher.FindAll())
{
foreach (string property in
result.GetDirectoryEntry().Properties.PropertyNames)
{
properties.Add(property);
}
break;
}
}
catch (Exception ex)
{
throw ex;
}
return properties;
}
public static string
getNTAccountName(string wksid)
{
SecurityIdentifier sid = new SecurityIdentifier(wksid);
NTAccount account = (NTAccount)sid.Translate(typeof(NTAccount));
return account.Value;
}
public static string
sIDtoString(byte[] sidBinary)
{
SecurityIdentifier sid = new SecurityIdentifier(sidBinary, 0);
return sid.ToString();
}
public static Dictionary
getADUserMemberOf(IntPtr logonToken)
{
Dictionary groups =
new Dictionary();
WindowsIdentity user = new WindowsIdentity(logonToken);
IdentityReferenceCollection irc = user.Groups;
foreach (IdentityReference ir in irc)
{
groups.Add(getNTAccountName(ir.Value), ir);
}
return groups;
}
public static string
getUserProperties(IntPtr logonToken)
{
WindowsIdentity user = new WindowsIdentity(logonToken);
string propertyDescription = string.Format("The Windows identity named {0}: ", user.Name);
if (!user.IsAnonymous)
propertyDescription += ", is not an Anonymous account";
if (user.IsAuthenticated)
propertyDescription += ", is authenticated";
if (user.IsSystem)
propertyDescription += ", is a System account";
if (user.IsGuest)
propertyDescription += ", is a Guest account";
string authenticationType = user.AuthenticationType;
if ((authenticationType != null))
{
propertyDescription += ", and uses " + authenticationType;
propertyDescription += " authentication type.";
}
propertyDescription += Environment.NewLine;
propertyDescription += "The SID for the owner is : " + user.Owner.ToString();
propertyDescription += Environment.NewLine;
propertyDescription += "Display the SIDs and names for the groups the current user belongs to:";
propertyDescription += Environment.NewLine;
IdentityReferenceCollection irc;
irc = user.Groups;
foreach (IdentityReference ir in irc)
{
propertyDescription += string.Format("Group {0}, SID: {1}{2}",
getNTAccountName(ir.Value), ir.Value, Environment.NewLine);
}
TokenImpersonationLevel token;
token = user.ImpersonationLevel;
propertyDescription += "The impersonation level for the current user is : " + token.ToString();
return propertyDescription;
}
public static List
getItemsInLDAP(string LDAPURL, LDAPFilterType type, string criteria)
{
List items = new List();
DirectoryEntry entries = new DirectoryEntry(LDAPURL);
string filter = getLDAPFilterString(type, criteria);
DirectorySearcher searcher = new DirectorySearcher(
entries, filter);
try
{
foreach (SearchResult result in searcher.FindAll())
{
items.Add((string)result.Properties["samAccountName"][0]);
}
}
catch (Exception ex)
{
throw ex;
}
return items;
}














viernes, 30 de enero de 2009

Obtener información de los objetos sql server

Este codigo sql, nos permite tener información como tipo de dato, longitud y si es un identity,
esto nos permite acercarnos mas al sql server y si miramos un poco mas a fondo podemos sacar provecho de esta informacion. Espero les ayude.


SELECT
DISTINCT C.colid AS IdCol, C.name AS ColName, T.name AS Type,
C.Length, C.Prec, C.Scale, C.IsNullable,
COLUMNPROPERTY(C.id, C.name, 'IsIdentity') AS [Identity],
COLUMNPROPERTY(C.id, C.name, 'IsComputed') AS Computed
FROM syscolumns C
INNER JOIN systypes T on C.xtype = T.xtype and T.xtype=T.xuserType



Tomando como ejemplo la base de datos AdventureWorks, obtendremos el siguiente resultado: