none
SQL Server 2005 y CLR RRS feed

  • Pregunta

  • Hola he implementado un proyecto sql clr con la ayuda de los amigos del foro ya esta casi listo pero cuando me ejecuto la aplicación me sale un mensaje para desbloquear un puerto, si me pueden ayudar con eso por favor, muestro imagen y código

    using System;
    using System.Data;
    using System.Data.SqlClient;
    using Microsoft.SqlServer.Server;
    using System.Xml;
    using System.IO;
    using System.Threading;
    
    
    public partial class Triggers
    {
        // Introduzca la tabla o vista existente del destino y elimine la marca de comentario de la línea de atributos
        // [Microsoft.SqlServer.Server.SqlTrigger (Name="Trigger1", Target="Table1", Event="FOR UPDATE")]
        public const string XmlDocumentsFolderPath = @"D:\SQLD\XmlDocuments";
    
        [SqlTrigger(
            Name = "Trigger1",
            Target = "dbo.Periodos", Event="FOR INSERT, UPADTE, DELETE")]
        public static void Trigger1()
        {
            // Sustituir con su propio código
            //SqlContext.Pipe.Send("Trigger FIRED");
    
            var xDoc = new XmlDocument();
            using(var cn = new SqlConnection("context connection=true"))
            using (var cmd = new SqlCommand("SELECT * FROM dbo.Periodos FOR XML PATH('Periodo'),ROOT('Periodos')", cn))
            {
                cn.Open();
                using (var reader = cmd.ExecuteXmlReader())
                {
                    xDoc.Load(reader);
                }
            }
    
            var tmpFilePath = Path.Combine(XmlDocumentsFolderPath, Guid.NewGuid().ToString("N") + ".tmp");
            using (var fs = new FileStream(tmpFilePath, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                xDoc.Save(fs);
            }
    
            var targetFiePath = Path.Combine(XmlDocumentsFolderPath, "Periodos.xml");
            int remainingRetries = 8;
            while (true)
            {
                try
                {
                    if (File.Exists(targetFiePath))
                    {
                        File.Replace(tmpFilePath, targetFiePath, null);
                    }
                    else
                    {
                        File.Move(tmpFilePath, targetFiePath);
                    }
                    return;
                }
                catch (Exception)
                {
                    if (--remainingRetries <= 0)
                    {
                        File.Delete(tmpFilePath);
                    }
                    throw;
                }
            }
    
        }
    }

    NOTA : Estoy usando NOD32 6 y el es el que controla el firewall, el SO W7. Otra cosa la ruta donde indico donde se va a guardar el xml esta en mi misma pc, en mi pc tengo instalado el servidor sql y la carpeta la tengo en D: en el código se puede apreciar la ruta donde debe guardar los archivos xml, pero mi duda es se tendrá que dar algun tipo de permiso para esa carpeta para que funcione, pero antes que todo me toca resolver el problema del mensaje.


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú




    • Editado Pedro Ávila miércoles, 24 de abril de 2013 15:16
    miércoles, 24 de abril de 2013 14:51

Respuestas

Todas las respuestas