<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4437835187472309678</id><updated>2011-09-10T04:55:23.495-07:00</updated><category term='Serialización'/><category term='Visual Basic .NET'/><category term='tabla temporal'/><category term='procedimiento almacenado'/><category term='linq'/><category term='Serializable'/><category term='.NET'/><title type='text'>Ismael Zori - Microsoft .NET</title><subtitle type='html'>Blog sobre programación con tecnología Microsoft .NET</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4437835187472309678.post-8249644524009596208</id><published>2010-12-13T04:43:00.000-08:00</published><updated>2010-12-13T04:44:55.742-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='procedimiento almacenado'/><category scheme='http://www.blogger.com/atom/ns#' term='linq'/><category scheme='http://www.blogger.com/atom/ns#' term='tabla temporal'/><title type='text'>Linq to Classes - Llamadas a PAs que retornan consulta a tabla temporal</title><content type='html'>&lt;p class="MsoNormal"&gt;Hemos visto que LINQ To Classes da problemas al agregar PAs al DBML cuando el resultado de éstos es una consulta a una tabla temporal. Siempre deja como retorno un entero en lugar de un tipo complejo con los campos. Esto es debido a que una tabla temporal puede ser modificada durante la sesión y Linq entiende que no es seguro retornar una estructura que puede cambiar. La solución al problema consiste en declarar una variable TABLE en lugar de una tabla temporal.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal"&gt;&lt;u&gt;CÓDIGO QUE NO FUNCIONA:&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;CREATE TABLE #T (CAMPO1 VARCHAR(12), CAMPO2 VARCHAR(15))&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;INSERT INTO #T SELECT CAMPO1, CAMPO2 FROM TABLA&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;SELECT * FROM #T&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal"&gt;&lt;u&gt;CÓDIGO QUE FUNCIONA:&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight:normal"&gt;&lt;u&gt;&lt;o:p&gt;&lt;span style="text-decoration:none"&gt; &lt;/span&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;DECLARE @T AS TABLE (CAMPO1 VARCHAR(12), CAMPO2 VARCHAR(15))&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;INSERT INTO @T SELECT CAMPO1, CAMPO2 FROM TABLA&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;SELECT * FROM @T&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4437835187472309678-8249644524009596208?l=ismaelzori.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/8249644524009596208/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4437835187472309678&amp;postID=8249644524009596208' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/8249644524009596208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/8249644524009596208'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/2010/12/linq-to-classes-llamadas-pas-que.html' title='Linq to Classes - Llamadas a PAs que retornan consulta a tabla temporal'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4437835187472309678.post-6134907074680240572</id><published>2010-11-22T09:56:00.000-08:00</published><updated>2010-11-22T09:59:18.901-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Basic .NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Serialización'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Serializable'/><title type='text'>Serialización .NET</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Public Class Form1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        Dim p = New Prueba() With {.Nombre = "Ismael", .Apellidos = "Zori"}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        Dim s = New System.Xml.Serialization.XmlSerializer(GetType(Prueba))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        Dim sw = New System.IO.StringWriter()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        s.Serialize(sw, p)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        MessageBox.Show(sw.ToString())&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    End Sub&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;End Class&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;serializable()&gt; _&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Public Class Prueba&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    Private m_Nombre As String&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    Public Property Nombre() As String&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        Get&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            Return m_Nombre&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        End Get&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        Set(ByVal value As String)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            m_Nombre = value&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        End Set&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    End Property&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    Private m_Apellidos As String&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    Public Property Apellidos() As String&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        Get&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            Return m_Apellidos&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        End Get&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        Set(ByVal value As String)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;            m_Apellidos = value&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;        End Set&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    End Property&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;End Class&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: small; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4437835187472309678-6134907074680240572?l=ismaelzori.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/6134907074680240572/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4437835187472309678&amp;postID=6134907074680240572' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/6134907074680240572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/6134907074680240572'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/2010/11/public-class-form1-private-sub.html' title='Serialización .NET'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4437835187472309678.post-7639448942940826235</id><published>2010-11-22T09:42:00.000-08:00</published><updated>2010-11-22T09:49:27.445-08:00</updated><title type='text'>SQL Server - Encriptación</title><content type='html'>&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;3 FORMAS DE ENCRIPTAR: Mediante claves simétricas, asimétricas y certificados&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;-- &lt;span style="font-weight: bold; "&gt;CLAVES SIMETRICAS&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span&gt;&lt;/span&gt;&lt;b&gt;-- -----------------&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;-- CREACION DE CLAVE (SIMETRICA)&lt;br /&gt;CREATE SYMMETRIC KEY CLAVE_DE_PRUEBA&lt;br /&gt;WITH ALGORITHM = TRIPLE_DES&lt;br /&gt;ENCRYPTION BY PASSWORD = 'MAMATEQUIEROMUCHO'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DECLARE @ORIGINAL AS VARCHAR(50)&lt;br /&gt;DECLARE @CIFRADO AS VARBINARY(MAX)&lt;br /&gt;SET @ORIGINAL = 'Menuda mierda de día'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- &lt;b&gt;ENCRIPTADO&lt;/b&gt;&lt;br /&gt;OPEN SYMMETRIC KEY CLAVE_DE_PRUEBA DECRYPTION BY PASSWORD = 'MAMATEQUIEROMUCHO'&lt;br /&gt;SET @CIFRADO = ENCRYPTBYKEY(KEY_GUID('CLAVE_DE_PRUEBA'), @ORIGINAL)&lt;br /&gt;SELECT @ORIGINAL AS ORIGINAL, @CIFRADO AS CIFRADO&lt;br /&gt;CLOSE SYMMETRIC KEY CLAVE_DE_PRUEBA&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- &lt;b&gt;DESENCRIPTADO&lt;/b&gt;&lt;br /&gt;OPEN SYMMETRIC KEY CLAVE_DE_PRUEBA DECRYPTION BY PASSWORD = 'MAMATEQUIEROMUCHO'&lt;br /&gt;DECLARE @VALOR_RECUPERADO VARCHAR(50)&lt;br /&gt;SET @VALOR_RECUPERADO = DECRYPTBYKEY(@CIFRADO)&lt;br /&gt;SELECT @ORIGINAL, @VALOR_RECUPERADO&lt;br /&gt;CLOSE SYMMETRIC KEY CLAVE_DE_PRUEBA&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- &lt;b&gt;CREACION DE PROCEDIMIENTO ALMACENADO CIFRADO&lt;/b&gt;&lt;br /&gt;ALTER PROCEDURE PA_INSERTAR_USUARIO&lt;br /&gt;(&lt;br /&gt;   @NOMBRE VARCHAR(20),&lt;br /&gt;   @EMAIL  VARCHAR(30),&lt;br /&gt;   @PASSWORD AS VARCHAR(20)&lt;br /&gt;) WITH ENCRYPTION&lt;br /&gt;AS&lt;br /&gt;   OPEN SYMMETRIC KEY CLAVE_DE_PRUEBA&lt;br /&gt;   DECRYPTION BY PASSWORD = 'MAMATEQUIEROMUCHO'&lt;br /&gt;   INSERT INTO USUARIOS&lt;br /&gt;   VALUES&lt;br /&gt;   (&lt;br /&gt;       @NOMBRE,&lt;br /&gt;       @EMAIL,&lt;br /&gt;       ENCRYPTBYKEY(KEY_GUID('CLAVE_DE_PRUEBA'), @PASSWORD)&lt;br /&gt;    )&lt;br /&gt;CLOSE SYMMETRIC KEY CLAVE_DE_PRUEBA&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- &lt;b&gt;CLAVES ASIMETRICAS&lt;/b&gt;&lt;br /&gt;-- ------------------&lt;br /&gt;CREATE ASYMMETRIC KEY CLAVE_DE_PRUEBA_A&lt;br /&gt;WITH ALGORITHM = RSA_2048&lt;br /&gt;ENCRYPTION BY PASSWORD = N'12345'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DECLARE @ORIGINAL AS VARCHAR(20)&lt;br /&gt;DECLARE @CIFRADO AS VARBINARY(MAX)&lt;br /&gt;DECLARE @RECUPERADO AS VARCHAR(20)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SET @ORIGINAL = 'A POR TODAS, HERMANOS'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;-- NO SE NECESITA PASAR CLAVE PARA CIFRAR:&lt;br /&gt;SET @CIFRADO = ENCRYPTBYASYMKEY(ASYMKEY_ID('CLAVE_DE_PRUEBA_A'), @ORIGINAL)&lt;br /&gt;SET @RECUPERADO = DECRYPTBYASYMKEY(ASYMKEY_ID('CLAVE_DE_PRUEBA_A'), @CIFRADO, N'12345')&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SELECT @ORIGINAL, @CIFRADO, @RECUPERADO&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;-- &lt;b&gt;CERTIFICADOS&lt;/b&gt;&lt;br /&gt;-- ------------&lt;br /&gt;CREATE CERTIFICATE CERTIFICADO_DE_PRUEBA&lt;br /&gt;ENCRYPTION BY PASSWORD = 'TORQUEMADA'&lt;br /&gt;WITH SUBJECT = 'CERTIFICADO DE PRUEBA',&lt;br /&gt;EXPIRY_DATE = '31/12/2010'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- BACKUP:&lt;br /&gt;BACKUP CERTIFICATE CERTIFICADO_DE_PRUEBA TO FILE='C:\BACKUP_CERTIFICADO_DE_PRUEBA.CER'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- USO:&lt;br /&gt;DECLARE @ORIGINAL AS VARCHAR(20)&lt;br /&gt;DECLARE @CIFRADO AS VARBINARY(MAX)&lt;br /&gt;DECLARE @RECUPERADO AS VARCHAR(20)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SET @ORIGINAL = 'A POR TODAS, HERMANOS'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;-- NO SE NECESITA PASAR CLAVE PARA CIFRAR:&lt;br /&gt;SET @CIFRADO = ENCRYPTBYCERT(CERT_ID('CERTIFICADO_DE_PRUEBA'), @ORIGINAL)&lt;br /&gt;SET @RECUPERADO = DECRYPTBYCERT(CERT_ID('CERTIFICADO_DE_PRUEBA'), @CIFRADO, N'TORQUEMADA')&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SELECT @ORIGINAL, @CIFRADO, @RECUPERADO&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4437835187472309678-7639448942940826235?l=ismaelzori.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/7639448942940826235/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4437835187472309678&amp;postID=7639448942940826235' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/7639448942940826235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/7639448942940826235'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/2010/11/sql-server-encriptacion.html' title='SQL Server - Encriptación'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4437835187472309678.post-8599944551354337912</id><published>2010-06-03T07:34:00.001-07:00</published><updated>2010-06-03T07:34:30.027-07:00</updated><title type='text'>Cargar un DataTable desde un documento Excel</title><content type='html'>&lt;p&gt;Se necesita tener Microsoft.Jet.OLEDB.4.0 y en propiedades del proyecto hay que especificar que la compilación se realiza para CPU x86 dado que no funciona la librería Microsoft.Jet.OLEDB.4.0 con x64.&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;string cs = &amp;quot;Provider=Microsoft.Jet.OLEDB.4.0;&amp;quot; +     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;Data Source=c:\\datos.xls;&amp;quot; +      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;Extended Properties=Excel 8.0;&amp;quot;;      &lt;br /&gt;var objDataAdapter = new OleDbDataAdapter(      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;SELECT * FROM [Hoja1$]&amp;quot;, cs);      &lt;br /&gt;var tabla = new DataTable();      &lt;br /&gt;objDataAdapter.Fill(tabla);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d87508ca-66a5-4d28-ba2e-6f9162fc2805" class="wlWriterEditableSmartContent"&gt;Etiquetas de Technorati: &lt;a href="http://technorati.com/tags/DataTable" rel="tag"&gt;DataTable&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Excel" rel="tag"&gt;Excel&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Microsoft.Jet.OLEDB.4.0" rel="tag"&gt;Microsoft.Jet.OLEDB.4.0&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4437835187472309678-8599944551354337912?l=ismaelzori.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/8599944551354337912/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4437835187472309678&amp;postID=8599944551354337912' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/8599944551354337912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/8599944551354337912'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/2010/06/cargar-un-datatable-desde-un-documento.html' title='Cargar un DataTable desde un documento Excel'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4437835187472309678.post-4231792034644399908</id><published>2010-06-02T13:53:00.001-07:00</published><updated>2010-06-02T13:53:15.927-07:00</updated><title type='text'>LINQ – Carga asíncrona</title><content type='html'>&lt;p&gt;Ejemplito de carga asíncrona:&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;// El código se ejecuta al pulsar sobre un botón del formulario     &lt;br /&gt;&lt;/font&gt;&lt;font size="1" face="Courier New"&gt;private void toolStripButton1_Click(object sender, EventArgs e)     &lt;br /&gt;{      &lt;br /&gt;&lt;/font&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lblCargando.Visible = true;&amp;#160; &lt;br /&gt;&lt;/font&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; List&amp;lt;PADRE&amp;gt; resultado = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var procesoCarga = new MethodInvoker(() =&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; using (var ctx = new BDDataContext())      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; resultado = ctx.PADREs.ToList();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; procesoCarga.BeginInvoke(      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new AsyncCallback(      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (r) =&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.Invoke(new MethodInvoker(() =&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pADREBindingSource.DataSource = resultado;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lblCargando.Visible = false;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }));      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }), null);      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;El código ctx.PADREs.ToList() se ejecuta por otro hilo, al finalizar esa instrucción dispara el callback que se encarga de asignar la fuente de datos recuperada por el hilo y de ocultar un label. Es importante tener en cuenta el que callback se ejecuta por el hilo por lo que cualquier acceso a controles del formulario hay que hacerlo utilizando Invoke o BeginInvoke con el objeto del formulario o del control que se desea actualizar.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4437835187472309678-4231792034644399908?l=ismaelzori.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/4231792034644399908/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4437835187472309678&amp;postID=4231792034644399908' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/4231792034644399908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/4231792034644399908'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/2010/06/linq-carga-asincrona.html' title='LINQ – Carga asíncrona'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4437835187472309678.post-4376635344304276375</id><published>2010-05-15T05:55:00.001-07:00</published><updated>2010-05-15T05:58:58.287-07:00</updated><title type='text'>LINQ – Función IsNull en LINQ To SQL</title><content type='html'>&lt;p&gt;Implementar la función IsNull en LINQ To SQL es sencillo. Consiste en crear el método en la clase parcial del DataContext de nuestro DBML.&lt;/p&gt;  &lt;p&gt;En el ejemplo, vamos a crear una función IsNull para campos tipo DateTime.&lt;/p&gt;  &lt;p&gt;Ir al código fuente de la clase DataContext de nuestro DBML (desde DBML &amp;gt; ver código fuente). Debería quedar más o menos como esto (nota: por motivos de ancho de la caja que contiene el texto de cada publicación dentro del blog pueden encontrarse líneas de código separadas que deberían ir en la misma línea):&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;Imports System.Data.Linq.Mapping     &lt;br /&gt;Imports System.Reflection&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;Partial Class BDDataContext&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;&amp;lt;FunctionAttribute(Name:=&amp;quot;IsNull&amp;quot;, IsComposable:=True)&amp;gt; _     &lt;br /&gt;&lt;/font&gt;&lt;font size="1" face="Courier New"&gt;Public Function IsNullDateTime( _     &lt;br /&gt;&lt;/font&gt;&lt;font size="1" face="Courier New"&gt;&amp;lt;Parameter(Name:=&amp;quot;field&amp;quot;, DbType:=&amp;quot;DATETIME&amp;quot;)&amp;gt; ByVal field As DateTime?, _     &lt;br /&gt;&lt;/font&gt;&lt;font size="1" face="Courier New"&gt;&amp;lt;Parameter(Name:=&amp;quot;output&amp;quot;, DbType:=&amp;quot;DATETIME&amp;quot;)&amp;gt; ByVal output As DateTime?) As DateTime?     &lt;br /&gt;&lt;/font&gt;&lt;font size="1" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Return CType(Me.ExecuteMethodCall(Me, _     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CType(MethodInfo.GetCurrentMethod(), MethodInfo),field, _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; output).ReturnValue, DateTime?)      &lt;br /&gt;&lt;/font&gt;&lt;font size="1" face="Courier New"&gt;End Function&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;End Class&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Como podemos observar mediante los atributos Parameter indicamos los dos parámetros de la función IsNull de SQL Server. En ellos se indica tipo de dato dentro de la base de datos.&lt;/p&gt;  &lt;p&gt;Uso:&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font size="1"&gt;Using ctx = new BDDataContext()         &lt;br /&gt;&amp;#160; Dim resultado = From c in ctx.Categories _          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Order By ctx.IsNullDateTime(c.Fecha1, DateTime.Now)&lt;/font&gt; _        &lt;br /&gt;&amp;#160;&amp;#160; &lt;font size="1"&gt;Select c         &lt;br /&gt;End Using&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Esto mismo podemos aplicarlo para cualquier otra función que exista en SQL Server pero no en LINQ.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1cef0aec-8707-4b02-aba3-f5097c630e5f" class="wlWriterEditableSmartContent"&gt;Etiquetas de Technorati: &lt;a href="http://technorati.com/tags/IsNull" rel="tag"&gt;IsNull&lt;/a&gt;,&lt;a href="http://technorati.com/tags/LINQ" rel="tag"&gt;LINQ&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SQL+Server" rel="tag"&gt;SQL Server&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4437835187472309678-4376635344304276375?l=ismaelzori.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/4376635344304276375/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4437835187472309678&amp;postID=4376635344304276375' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/4376635344304276375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/4376635344304276375'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/2010/05/linq-funcion-isnull-en-linq-to-sql.html' title='LINQ – Función IsNull en LINQ To SQL'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4437835187472309678.post-4523829511971796198</id><published>2010-05-03T15:48:00.001-07:00</published><updated>2010-05-03T15:48:30.240-07:00</updated><title type='text'>LINQ – WITH(NOLOCK) de SQL Server</title><content type='html'>&lt;p&gt;En muchas ocasiones necesitamos lanzar consultas rápidas, para recuperar datos sin importarnos demasiado si reflejan los últimos cambios “commitidos”, es decir, consulta teniendo en cuenta los últimos cambios aunque no se haya llamado a un commit. &lt;/p&gt;  &lt;p&gt;Esta sencilla operación la realizamos fácilmente con SQL con una sentencia de este tipo:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;“SELECT * FROM RECEPCIONES_CAB WITH(NOLOCK)”&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Ahora bien, cuando realizamos una consulta utilizando LINQ To SQL nos encontramos que no existe ninguna palabra reservada o método que nos sirva para realizar este tipo de consultas. Para hacerlo tenemos que abrir una transacción de tipo ReadUncommited y ejecutar la consulta. Por ejemplo:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Estrangelo Edessa"&gt;using System;     &lt;br /&gt;using System.Collections.Generic;      &lt;br /&gt;using System.ComponentModel;      &lt;br /&gt;using System.Data;      &lt;br /&gt;using System.Drawing;      &lt;br /&gt;using System.Linq;      &lt;br /&gt;using System.Text;      &lt;br /&gt;using System.Windows.Forms;      &lt;br /&gt;using System.Transactions; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Estrangelo Edessa"&gt;namespace WindowsFormsApplication1     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public partial class Form1 : Form      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public Form1()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; InitializeComponent();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Estrangelo Edessa"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private void Form1_Load(     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; object sender,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EventArgs e)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; using (var ctx = new       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DataClasses1DataContext())      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; using (var scope = new TransactionScope      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (TransactionScopeOption.Required,&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new TransactionOptions() {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ctx.DeferredLoadingEnabled = false;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var dlo = new System.Data.Linq.DataLoadOptions();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dlo.LoadWith&amp;lt;RECEPCIONES_CAB&amp;gt;(r =&amp;gt; r.RECEPCIONES_LIN);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dlo.LoadWith&amp;lt;RECEPCIONES_LIN&amp;gt;(r =&amp;gt; r.V_PALETS);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ctx.LoadOptions = dlo; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Estrangelo Edessa"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rECEPCIONES_CABBindingSource.DataSource = ctx.RECEPCIONES_CAB.ToList();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4437835187472309678-4523829511971796198?l=ismaelzori.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/4523829511971796198/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4437835187472309678&amp;postID=4523829511971796198' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/4523829511971796198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/4523829511971796198'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/2010/05/linq-withnolock-de-sql-server.html' title='LINQ – WITH(NOLOCK) de SQL Server'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4437835187472309678.post-6394823160786543201</id><published>2010-05-03T15:29:00.001-07:00</published><updated>2010-05-03T15:29:05.131-07:00</updated><title type='text'>LINQ – Error “Se ha intentado quitar una relación entre TABLA_PADRE y TABLA_HIJA, pero una de las claves externas de la relación (TABLA_HIJA.FK) no se puede establecer a null”</title><content type='html'>&lt;p&gt;&lt;strong&gt;¿CUANDO SE PRODUCE?&lt;/strong&gt;    &lt;br /&gt;Al intentar eliminar un registro de una tabla hija que posee una relación con otra tabla. En el ejemplo: AVISO_RECEPCIONES_CAB -&amp;gt; AVISO_RECEPCIONES_LIN, al borrar un registro de AVISO_RECEPCIONES_LIN    &lt;br /&gt;Sólo ocurre con foreignkeys que no permiten nulos. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SOLUCIÓN:&lt;/strong&gt;    &lt;br /&gt;Abrir el DBML para ver el XML (Abrir con… &amp;gt; Editor XML) y en la relación de la tabla HIJA añadir 'DeleteOnNull=&amp;quot;true&amp;quot;'. Por ejemplo: &lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;lt;Table Name=&amp;quot;dbo.AVISO_RECEPCIONES_LIN&amp;quot; Member=&amp;quot;AVISO_RECEPCIONES_LIN&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Type Name=&amp;quot;AVISO_RECEPCIONES_LIN&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Column Name=&amp;quot;AVISO_RECEPCION&amp;quot; Type=&amp;quot;System.Int32&amp;quot; DbType=&amp;quot;Int NOT NULL&amp;quot; IsPrimaryKey=&amp;quot;true&amp;quot; CanBeNull=&amp;quot;false&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Column Name=&amp;quot;LINEA&amp;quot; Type=&amp;quot;System.Int32&amp;quot; DbType=&amp;quot;Int NOT NULL&amp;quot; IsPrimaryKey=&amp;quot;true&amp;quot; CanBeNull=&amp;quot;false&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Column Name=&amp;quot;CODIGO_PRESOLICITUD&amp;quot; Type=&amp;quot;System.String&amp;quot; DbType=&amp;quot;VarChar(35)&amp;quot; CanBeNull=&amp;quot;true&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Column Name=&amp;quot;REFERENCIA&amp;quot; Type=&amp;quot;System.String&amp;quot; DbType=&amp;quot;VarChar(20) NOT NULL&amp;quot; CanBeNull=&amp;quot;false&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Column Name=&amp;quot;REFERENCIA_PROVEEDOR&amp;quot; Type=&amp;quot;System.String&amp;quot; DbType=&amp;quot;VarChar(20)&amp;quot; CanBeNull=&amp;quot;true&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Column Name=&amp;quot;CODIGO_ALMACEN&amp;quot; Type=&amp;quot;System.String&amp;quot; DbType=&amp;quot;VarChar(5)&amp;quot; CanBeNull=&amp;quot;true&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Column Name=&amp;quot;CANTIDAD&amp;quot; Type=&amp;quot;System.Int32&amp;quot; DbType=&amp;quot;Int NOT NULL&amp;quot; CanBeNull=&amp;quot;false&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Column Name=&amp;quot;CANTIDAD_RECEPCIONADA&amp;quot; Type=&amp;quot;System.Int32&amp;quot; DbType=&amp;quot;Int NOT NULL&amp;quot; CanBeNull=&amp;quot;false&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Column Name=&amp;quot;LOTE&amp;quot; Type=&amp;quot;System.String&amp;quot; DbType=&amp;quot;VarChar(20)&amp;quot; CanBeNull=&amp;quot;true&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Column Name=&amp;quot;PRECIO_UNITARIO&amp;quot; Type=&amp;quot;System.Decimal&amp;quot; DbType=&amp;quot;Money&amp;quot; CanBeNull=&amp;quot;true&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Column Name=&amp;quot;ORIGEN&amp;quot; Type=&amp;quot;System.Byte&amp;quot; DbType=&amp;quot;TinyInt&amp;quot; CanBeNull=&amp;quot;true&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Column Name=&amp;quot;REVISION&amp;quot; Type=&amp;quot;System.Byte&amp;quot; DbType=&amp;quot;TinyInt&amp;quot; CanBeNull=&amp;quot;true&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Column Name=&amp;quot;FECHA_PREVISTA_ENTREGA&amp;quot; Type=&amp;quot;System.DateTime&amp;quot; DbType=&amp;quot;DateTime&amp;quot; CanBeNull=&amp;quot;true&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Association Name=&amp;quot;AVISO_RECEPCIONES_CAB_AVISO_RECEPCIONES_LIN&amp;quot; Member=&amp;quot;AVISO_RECEPCIONES_CAB&amp;quot; ThisKey=&amp;quot;AVISO_RECEPCION&amp;quot; OtherKey=&amp;quot;AVISO_RECEPCION&amp;quot; Type=&amp;quot;AVISO_RECEPCIONES_CAB&amp;quot; IsForeignKey=&amp;quot;true&amp;quot; DeleteOnNull=&amp;quot;true&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Type&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;/Table&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt; En caso de tener que implementar un método parcial en el código fuente del DataContext para borrado (DeleteTABLA()) hay que crear una clase parcial de la tabla hija y crear una propiedad que duplique    &lt;br /&gt; la foreignkey (en el caso del ejemplo la FK es el campo AVISO_RECEPCION). Su valor se insertará en el método 'OnLoaded'. Esto se tiene que hacer así porque por motivo X deja el campo de la relación a Nothing y pierde ésta.     &lt;br /&gt;Ejemplo:    &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;Partial Class AVISO_RECEPCIONES_LIN     &lt;br /&gt;&amp;#160;&amp;#160; Private m_AVISO_RECEPCION_2 As Integer      &lt;br /&gt;&amp;#160;&amp;#160; Public Property AVISO_RECEPCION_2() _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; As Integer      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Get      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Return m_AVISO_RECEPCION_2      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; End Get      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Set(ByVal value As Integer)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; m_AVISO_RECEPCION_2 = value      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; End Set      &lt;br /&gt;&amp;#160;&amp;#160; End Property      &lt;br /&gt;&amp;#160;&amp;#160; Private Sub OnLoaded()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; m_AVISO_RECEPCION_2 = Me.AVISO_RECEPCION      &lt;br /&gt;&amp;#160;&amp;#160; End Sub      &lt;br /&gt;End Class      &lt;br /&gt;Private Sub DeleteAVISO_RECEPCIONES_LIN( _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ByVal instance As AVISO_RECEPCIONES_LIN)      &lt;br /&gt;&amp;#160;&amp;#160; Me.ExecuteCommand(&amp;quot;DELETE “ &amp;amp; _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; “AVISO_RECEPCIONES_LIN “ &amp;amp; _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ”WHERE AVISO_RECEPCION = &amp;quot; &amp;amp; _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; instance.AVISO_RECEPCION_2 &amp;amp; _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot; AND LINEA = &amp;quot; &amp;amp; instance.LINEA)      &lt;br /&gt;End Sub      &lt;br /&gt;&lt;/font&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Si es una VISTA, se puede duplicar el campo en la propia SELECT y lanzar el ExecuteCommand con el DELETE por ese campo duplicado.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4437835187472309678-6394823160786543201?l=ismaelzori.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/6394823160786543201/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4437835187472309678&amp;postID=6394823160786543201' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/6394823160786543201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/6394823160786543201'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/2010/05/linq-error-se-ha-intentado-quitar-una.html' title='LINQ – Error “Se ha intentado quitar una relación entre TABLA_PADRE y TABLA_HIJA, pero una de las claves externas de la relación (TABLA_HIJA.FK) no se puede establecer a null”'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4437835187472309678.post-4592929256565498709</id><published>2010-05-03T15:18:00.001-07:00</published><updated>2010-05-03T15:18:15.547-07:00</updated><title type='text'>LINQ – Campos calculados</title><content type='html'>&lt;p&gt;1) Creamos una clase parcial en el DBML para la entidad sobre la que queremos añadir un campo calculado haciendo doble clic sobre el DBML. En el ejemplo en mi DMBL tengo una tabla llamada TIPOS_ENVIO:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;Imports System.Data.Linq.Mapping &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;Partial Class BDDataContext     &lt;br /&gt;End Class      &lt;br /&gt;Partial Class TIPOS_ENVIO      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Public ReadOnly Property CAMPO_CALCULADO() _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; As String      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Get      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Return Me.TIPO_ENVIO.ToString() &amp;amp; _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot; - &amp;quot; &amp;amp; Me.DESCRIPCION_TIPO      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; End Get      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; End Property      &lt;br /&gt;End Class&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;2) Para usarlo sólo tendremos que poner NOMBRE_CALCULADO en la propiedad del control en la que se indique el campo a enlazar. Por ejemplo, en una rejilla de Developer dentro de la propiedad FieldName de la columna. CUANDO CREAMOS EL ENLACE EL CAMPO CALCULADO NO APARECE EN LA PESTAÑA DE ORIGENES DE DATOS   &lt;br /&gt;&amp;#160;&amp;#160; NO PASA NADA, SE PUEDE AGREGAR UNA NUEVA COLUMNA AL GRID CON EL FIELDNAME AUNQUE NO ESTÉ. El ejemplo, lo he puesto con una rejilla de Developer pero, puede ser utilizado con cualquier otro control, como una caja de texto o un label asignando un Databinding a la propiedad text con ese nombre de campo.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4437835187472309678-4592929256565498709?l=ismaelzori.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/4592929256565498709/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4437835187472309678&amp;postID=4592929256565498709' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/4592929256565498709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/4592929256565498709'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/2010/05/linq-campos-calculados.html' title='LINQ – Campos calculados'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4437835187472309678.post-407311554385269948</id><published>2010-05-02T01:28:00.001-07:00</published><updated>2010-05-02T01:28:29.178-07:00</updated><title type='text'>Métodos de extensión en Visual Basic .NET</title><content type='html'>&lt;p&gt;La forma de crear métodos de extensión difiere de VB.NET a C#. En esta ocasión vamos a ver como se hace con VB.Net.&lt;/p&gt;  &lt;p&gt;1) Crear Módulo   &lt;br /&gt;2) Agregar referencia a System.Runtime.CompilerServices    &lt;br /&gt;3) Crear método agregando el atributo &amp;lt;Extension()&amp;gt;. En el ejemplo que ponemos a continuación vamos a crear un método de extensión para la clase string que se va a llamar AlternarMayusculas:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;strong&gt;Module&lt;/strong&gt; MisExtensiones      &lt;br /&gt;&amp;lt;Extension()&amp;gt; _       &lt;br /&gt;&lt;strong&gt;Function&lt;/strong&gt; AlternarMayusculas( _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;ByVal&lt;/strong&gt; cadena &lt;strong&gt;As String&lt;/strong&gt;) &lt;strong&gt;As String&lt;/strong&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;Dim&lt;/strong&gt; sw = False      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;Dim&lt;/strong&gt; sb &lt;strong&gt;as new&lt;/strong&gt; System.Text.StringBuilder      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;For Each&lt;/strong&gt; c &lt;strong&gt;In&lt;/strong&gt; cadena      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;If&lt;/strong&gt; sw &lt;strong&gt;Then&lt;/strong&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sb.Append(c.ToUpper())      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;Else&lt;/strong&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sb.Append(c.ToLower())      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;End If&lt;/strong&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sw = &lt;strong&gt;Not&lt;/strong&gt; sw      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;Next&lt;/strong&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;Return&lt;/strong&gt; sb.ToString()      &lt;br /&gt;&lt;strong&gt;End&lt;/strong&gt; &lt;strong&gt;Function&lt;/strong&gt;      &lt;br /&gt;&lt;strong&gt;End Module&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;4) Uso del método de extensión:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;strong&gt;Dim&lt;/strong&gt; cadena = “Arkansas, donde los hombres son muy hombres y las mujeres tambien”&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;MessageBox.Show(cadena.AlternarMayusculas())&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="trebu"&gt;Esto visualizarará un mensaje así: ArKaNsAs, DoNdE etc,etc&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4437835187472309678-407311554385269948?l=ismaelzori.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/407311554385269948/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4437835187472309678&amp;postID=407311554385269948' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/407311554385269948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/407311554385269948'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/2010/05/metodos-de-extension-en-visual-basic.html' title='Métodos de extensión en Visual Basic .NET'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4437835187472309678.post-4603666795808142444</id><published>2010-05-02T01:14:00.001-07:00</published><updated>2010-05-02T01:14:04.462-07:00</updated><title type='text'>LINQ – Group Join: Hacer un LEFT JOIN</title><content type='html'>&lt;p&gt;Ejemplo:&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&lt;strong&gt;Dim&lt;/strong&gt; resultado = &lt;strong&gt;From&lt;/strong&gt; pais &lt;strong&gt;In&lt;/strong&gt; m_Paises _&lt;/code&gt;    &lt;br /&gt;&lt;code&gt;&lt;strong&gt;Group&lt;/strong&gt; &lt;strong&gt;Join&lt;/strong&gt; persona &lt;strong&gt;In&lt;/strong&gt; m_Personas _      &lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;strong&gt;On&lt;/strong&gt; pais.CodPais &lt;strong&gt;Equals&lt;/strong&gt; persona.CodPais _      &lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;strong&gt;Into&lt;/strong&gt; PersonasPais = &lt;strong&gt;Group&lt;/strong&gt; _&lt;/code&gt;    &lt;br /&gt;&lt;code&gt;&lt;strong&gt;From&lt;/strong&gt; p In PersonasPais.DefaultIfEmpty() _&lt;/code&gt;    &lt;br /&gt;&lt;code&gt;&lt;strong&gt;Select&lt;/strong&gt; &lt;strong&gt;New&lt;/strong&gt; &lt;strong&gt;With&lt;/strong&gt; {pais.NombrePais, .Persona = p}&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;La variable &lt;strong&gt;resultado&lt;/strong&gt; será una secuencia de objetos de un tipo anónimo compuesto por las siguientes propiedades: NombrePais (string) y Persona (objeto del tipo Persona, es decir, del tipo de dato contenido en la secuencia m_Personas). En caso de que el país no tenga ninguna persona el método DefaultIfEmpty() retornará nothing de modo que la propiedad Persona de la secuencia final tendrá nothing, de este modo ya tenemos el LEFT JOIN de Países a Personas, es decir, mostrar todos los países independientemente de si tienen personas o no.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4437835187472309678-4603666795808142444?l=ismaelzori.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/4603666795808142444/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4437835187472309678&amp;postID=4603666795808142444' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/4603666795808142444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/4603666795808142444'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/2010/05/linq-group-join-hacer-un-left-join.html' title='LINQ – Group Join: Hacer un LEFT JOIN'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4437835187472309678.post-4814190255066394555</id><published>2010-05-02T01:03:00.001-07:00</published><updated>2010-05-02T01:05:10.169-07:00</updated><title type='text'>LINQ – Group Join: Agrupación por unión de dos tablas</title><content type='html'>&lt;p&gt;Ejemplo:&lt;/p&gt;  &lt;pre&gt;Dim resultado = From pais In m_Paises _&lt;br /&gt;              Group Join persona In m_Personas On _&lt;br /&gt;              pais.CodPais Equals persona.CodPais _&lt;br /&gt;              Into PersonasDelPais = Group, _&lt;br /&gt;              EdadMinima = Min(persona.Edad) _&lt;br /&gt;              Select pais.NombrePais, _&lt;br /&gt;                     pais.CodPais, _&lt;br /&gt;                     PersonasDelPais, EdadMinima&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font size="2" face="Trebuchet MS"&gt;&lt;strong&gt;m_Paises&lt;/strong&gt; tiene objetos de la clase &lt;strong&gt;Pais&lt;/strong&gt;. Esta clase tiene las propiedades &lt;strong&gt;CodPais&lt;/strong&gt; (string) y &lt;strong&gt;NombrePais&lt;/strong&gt; (string).&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font size="2" face="Trebuchet MS"&gt;&lt;strong&gt;m_Personas&lt;/strong&gt; tiene objetos de la clase &lt;strong&gt;Persona&lt;/strong&gt;. Esta clase tiene las propiedades &lt;strong&gt;NombrePersona&lt;/strong&gt; (string), &lt;strong&gt;CodPais&lt;/strong&gt; (string) y &lt;strong&gt;Edad&lt;/strong&gt; (integer).&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font size="2" face="Trebuchet MS"&gt;Esta es una de las consultas más interesantes que podemos realizar con LINQ, se trata de una mezcla entre JOIN y agrupación (lo haremos por medio de las palabras reservadas &lt;strong&gt;Group Join&lt;/strong&gt;). &lt;/font&gt;&lt;font size="2" face="Trebuchet MS"&gt;&lt;br /&gt;&lt;/font&gt;&lt;font size="2" face="Trebuchet MS"&gt;Lo vemos con el ejemplo anterior: la variable resultado será una secuencia de objetos con las siguientes propiedades: &lt;strong&gt;NombrePais&lt;/strong&gt;(string), &lt;strong&gt;CodPais&lt;/strong&gt;(string), &lt;strong&gt;PersonasDelPais&lt;/strong&gt; (secuencia de objetos del mismo tipo que los objetos contenidos en la secuencia m_Personas, es decir, objetos de la clase &lt;strong&gt;Persona&lt;/strong&gt;) y &lt;strong&gt;EdadMinima&lt;/strong&gt; (integer). ´&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font size="2" face="Trebuchet MS"&gt;Como se ve hemos realizado una agrupación con otra tabla generando una secuencia (&lt;strong&gt;PersonasDelPais&lt;/strong&gt;) y además hemos utilizado una función de agregado, en este caso &lt;strong&gt;Min&lt;/strong&gt; para guardar la edad mínima dentro de ese grupo de personas pertenecientes a un país.&lt;/font&gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4437835187472309678-4814190255066394555?l=ismaelzori.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/4814190255066394555/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4437835187472309678&amp;postID=4814190255066394555' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/4814190255066394555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/4814190255066394555'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/2010/05/linq-group-join-agrupacion-por-union-de.html' title='LINQ – Group Join: Agrupación por unión de dos tablas'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4437835187472309678.post-8556072274394797680</id><published>2010-05-02T00:48:00.001-07:00</published><updated>2010-05-02T00:48:01.411-07:00</updated><title type='text'>LINQ – InnerJoin</title><content type='html'>&lt;p&gt;Ejemplo:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;strong&gt;Dim&lt;/strong&gt; resultado = &lt;strong&gt;From&lt;/strong&gt; pais &lt;strong&gt;in&lt;/strong&gt; m_Paises _      &lt;br /&gt;&lt;strong&gt;Join&lt;/strong&gt; persona &lt;strong&gt;in&lt;/strong&gt; m_Personas _      &lt;br /&gt;&lt;strong&gt;On&lt;/strong&gt; pais.CodPais &lt;strong&gt;Equals&lt;/strong&gt; persona.CodPais _      &lt;br /&gt;&lt;strong&gt;Order&lt;/strong&gt; &lt;strong&gt;by&lt;/strong&gt; pais.NombrePais, persona.Edad _      &lt;br /&gt;&lt;strong&gt;Select&lt;/strong&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;strong&gt;with&lt;/strong&gt; {pais.NombrePais, persona.NombrePersona, persona.Edad}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;En el ejemplo realizamos el equivalente a un INNER JOIN de base de datos pero utilizando LINQ gracias a la palabra reservada &lt;strong&gt;Join&lt;/strong&gt;. En este caso la variable resultado almacenará una secuencia de un tipo anónimo compuesto por tres propiedades: NombrePais, NombrePersona y Edad. La primera de las propiedades es recuperada de la secuencia m_Paises y las dos últimas de la secuencia m_Personas. &lt;/p&gt;  &lt;p&gt;Los campos por los que se realiza el JOIN son indicados mediante la palabra reservada &lt;strong&gt;On &lt;/strong&gt;y es importante utilizar &lt;strong&gt;Equals&lt;/strong&gt; y &lt;strong&gt;no&lt;/strong&gt; ‘=’.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4437835187472309678-8556072274394797680?l=ismaelzori.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/8556072274394797680/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4437835187472309678&amp;postID=8556072274394797680' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/8556072274394797680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/8556072274394797680'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/2010/05/linq-innerjoin.html' title='LINQ – InnerJoin'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4437835187472309678.post-1844901205975329351</id><published>2010-05-02T00:40:00.001-07:00</published><updated>2010-05-02T00:40:29.727-07:00</updated><title type='text'>LINQ – Group By: Agrupación dentro de una misma secuencia</title><content type='html'>&lt;p&gt;Ejemplo:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;strong&gt;Dim&lt;/strong&gt; resultado = &lt;strong&gt;From&lt;/strong&gt; persona &lt;strong&gt;In&lt;/strong&gt; m_Personas _      &lt;br /&gt;&lt;strong&gt;Order&lt;/strong&gt; &lt;strong&gt;By&lt;/strong&gt; persona.CodPais _      &lt;br /&gt;&lt;strong&gt;Group By&lt;/strong&gt; CodigoPais = persona.CodPais _      &lt;br /&gt;&lt;strong&gt;Into&lt;/strong&gt; PersonasPorPais = &lt;strong&gt;Group&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Partimos de una secuencia (por ejemplo un List(Of T)) y queremos generar una nueva secuencia de objetos con dos propiedades: &lt;strong&gt;CodigoPais&lt;/strong&gt; que es una cadena con el código del país y &lt;strong&gt;PersonasPorPais&lt;/strong&gt; que es una secuencia que contiene objetos con el mismo tipo de dato que los de la lista m_Personas.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;En el caso del ejemplo también se aplica una ordenación por código de país.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4437835187472309678-1844901205975329351?l=ismaelzori.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/1844901205975329351/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4437835187472309678&amp;postID=1844901205975329351' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/1844901205975329351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/1844901205975329351'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/2010/05/linq-group-by-agrupacion-dentro-de-una.html' title='LINQ – Group By: Agrupación dentro de una misma secuencia'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4437835187472309678.post-4283431085844897984</id><published>2010-05-01T01:28:00.001-07:00</published><updated>2010-05-02T11:03:27.647-07:00</updated><title type='text'>Presentación</title><content type='html'>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_oQnd4iI1nOE/S9vmJY0nZrI/AAAAAAAAOtM/Fr8u656yeXI/s1600-h/_DSC1352%5B10%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="_DSC1352" border="0" alt="_DSC1352" align="left" src="http://lh4.ggpht.com/_oQnd4iI1nOE/S9vmKDD4i6I/AAAAAAAAOtQ/AaupbS2aBAw/_DSC1352_thumb%5B8%5D.jpg?imgmax=800" width="164" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Mucho tiempo ha transcurrido, diez años ya!, desde que terminé mis estudios de informática. Son muchos los buenos recuerdos de aquella época, cuando internet empezaba a llegar a nuestras casas a través del modem y se avecinaba el efecto 2.000, también por aquel entonces surgieron cantidad de empresas debido al boom de las .com, yo mismo participé en todo aquello.&lt;/p&gt;  &lt;p&gt;Mis comienzos como programador fueron curiosamente con un lenguaje emergente que estudié por mi cuenta, ASP. Trabajé en una empresa llamada Webmedia donde aprendí mucho HTML, JavaScript y ASP. Fue por poco tiempo, dado que decidí dejarlo para terminar mis estudios que en ese momento era lo más importante para mí, pero resultó ser muy intenso. &lt;/p&gt;  &lt;p&gt;Finalicé mis estudios con muy buenos resultados y entré a formar parte en otra empresa llamada Eurosoft en la que desarrollabamos aplicaciones a tres capas utilizando MTS (lo que más tarde paso a ser COM+) programando la capa de negocio con Visual Basic y la de presentación con ASP, HTML y JavaScript. &lt;/p&gt;  &lt;p&gt;Más tarde, buscando fortalecer mis conocimientos, me atrajo la idea de formar parte una empresa de Bilbao que se estaba estableciendo en Madrid. Posibilidades de trabajar en aplicaciones para el estado y grandes clientes. Mi labor allí sería de analista programador, eso también me motivaba bastante dado que para mí significaba dejar de ser un simple “picador” de código para formar parte en el diseño de la aplicación. Decidí formar parte de su equipo y aunque anduve el algún proyecto corto para el estado mi principal labor allí estuvo con la Universidad Menéndez Pelayo, donde coordiné a un equipo de cinco personas en un proyecto para el departamento de Administración de la universidad. El proyecto era, nuevamente, con ASP pero esta vez con COM+. También tenía partes con RDO (Remote Data Objects).&lt;/p&gt;  &lt;p&gt;Una vez terminado aquel proyecto probé a hacerme autónomo pero no hubo mucho éxito, el trabajo no era suficiente así que volví otra vez a trabajar por cuenta ajena, tal vez en otro momento…&lt;/p&gt;  &lt;p&gt;Al poco tiempo conocí a Vicente, de la empresa Comunytek. Necesitaban a gente para una aplicación para Ahorro Corporación, empresa muy conocida en gestión de fondos de inversión, muchos de los fondos ofrecidos por las cajas de ahorros son gestionados por esta entidad. Me atrajo la idea mucho, un sector que desconocía totalmente, el financiero, algo totalmente diferente a la típica informática de gestión. Allí estuve desarrollando una aplicación en Visual Basic 6.0 para gestión de fondos de inversión. Cuando terminamos allí Comunytek me envió a Ahorro y Titulización para un desarrollo junto a los informáticos de allí para gestión de fondos de titulización, nuevamente en Visual Basic 6.0 con COM+. Terminamos el desarrollo allí y comenzamos con el que hasta el momento me ha parecido el proyecto más apasionante de todos en los que he trabajado: el proyecto NEMO para el Banco Santander. Se trataba en un principio de un terminal de contratación y difusión para la mesa de derivados (futuros, opciones, rolos y otras estrategias) pero luego se fue ampliando, para deuda, se incluyó un sistema de gestión de quoting para deuda y warrants, etc. Una de las cosas interesantes de aquello era el tiempo real, desarrollamos aplicaciones de alto rendimiento utilizando tecnología Microsoft .NET con C#, comunicaciones con sockets, programación multihilo, etc. Aprendí muchísimo y tuve la enorme suerte de trabajar con Ian Marteens (autor de varios libros, entre ellos de la Cara Oculta de C#, libro que podéis adquirir desde su web &lt;a title="http://www.marteens.com/" href="http://www.marteens.com/"&gt;http://www.marteens.com/&lt;/a&gt;) y de coordinar al equipo de .NET.&lt;/p&gt;  &lt;p&gt;En Comunytek estuve desde el año 2.002 hasta abril de 2009, siete años muy interesantes pero también muy sacrificados, el trabajo estaba en Madrid y yo vivo en Guadalajara, el viaje diario acabó por agotarme y tuve que tomar una decisión que no fue nada fácil. &lt;/p&gt;  &lt;p&gt;Entré en ICP Logística, un sector que desconocía pero creo que muy estratégico e interesante para mí. He sacrificado dinero y cargo por tener algo más de tiempo y, al menos de momento, lo agradezco, sobre todo ahora que recientemente acabo de ser padre.&lt;/p&gt;  &lt;p&gt;En ICP estamos desarrollando aplicaciones con Visual Basic .NET con framework 3.5 bajo SQL Server 2008 utilizando Developer Express como componentes gráficos.&lt;/p&gt;  &lt;p&gt;Terminada mi presentación explico el motivo de creación de este blog:&lt;/p&gt;  &lt;p&gt;A lo largo de mi carrera profesional me he topado con esos típicos problemas al desarrollar que son reincidentes y que no te acuerdas de cómo se abordaban, con lo que te toca rebuscar entre código antiguo o bien navegar nuevamente por internet para conseguir información. Como estoy cansado de eso he decidido ir metiendo todas esas cosillas que me voy encontrando en este blog para que de paso le sirva a la gente que tenga el mismo problema. &lt;/p&gt;  &lt;p&gt;No pretendo en absoluto hacer cátedra de nada de lo que diga aquí. Es probable que existan formas mejores de abordar los problemas pero yo pondré las que me han funcionado, por supuesto la gente es libre de hacer cualquier tipo de comentario siempre y cuando sea constructivo, que es de lo que se trata.&lt;/p&gt;  &lt;p&gt;La mayor parte de las entradas que publicaré en este blog están relacionadas con la tecnología Microsoft .NET (C#, VB.Net) o con SQL Server que es lo que llevo manejando desde hace bastantes años.&lt;/p&gt;  &lt;p&gt;Un fuerte abrazo&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4437835187472309678-4283431085844897984?l=ismaelzori.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ismaelzori.blogspot.com/feeds/4283431085844897984/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4437835187472309678&amp;postID=4283431085844897984' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/4283431085844897984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4437835187472309678/posts/default/4283431085844897984'/><link rel='alternate' type='text/html' href='http://ismaelzori.blogspot.com/2010/05/ismael-zori.html' title='Presentación'/><author><name>iSM@eL</name><uri>http://www.blogger.com/profile/15780757115567362972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://1.bp.blogspot.com/_oQnd4iI1nOE/S93hC3-m_XI/AAAAAAAAOtg/b1mVPeXSz20/S220/yo-2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_oQnd4iI1nOE/S9vmKDD4i6I/AAAAAAAAOtQ/AaupbS2aBAw/s72-c/_DSC1352_thumb%5B8%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
