es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La tarea de Script de SSIS arroja una referencia de objeto no establecida como instancia de un objeto.

Estoy intentando consultar la base de datos y enviar el contenido en el cuerpo del correo electrónico. Cuando intento ejecutar el paquete, arroja un error de deadlock. ¿Alguien puede sugerir qué es lo que me falta?

El script es como sigue:

Región de Espacios de nombres

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Linq;
using System.Collections.Generic;
using System.Collections;
using System.Data.OleDb;
using System.Net.Mail;
using System.Net;
#endregion

namespace ST_c074d0acfee7488b96d42a0f858efee7
{
[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
public partial class ScriptMain: Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{

    enum ScriptResults
    {
        Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
        Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
    }

    public void Main()
    {
        Variables varCollection = null;

        string User_Recepient_Email_ID = Dts.Variables["User::UserEml"].Value.ToString();

        //Dts.VariableDispenser.LockForWrite("User::EmailData");
        //Dts.VariableDispenser.GetVariables(ref varCollection);
        var data = varCollection["User::EmailData"].Value;

        OleDbDataAdapter da = new OleDbDataAdapter();
        DataTable dt = new DataTable();
        da.Fill(dt, varCollection["User::EmailData"].Value);

        SendMailMessage("loadJob@xyz.com", User_Recepient_Email_ID, "ETL Load Status Report", ConvertDataTableToHTML(dt), true, "smtp.xxxxxxxxxxxxx.org");

        Dts.TaskResult = (int)ScriptResults.Success;
    }


    public static string ConvertDataTableToHTML(DataTable dt)
    {
        string html = "<table border='1'>";
        // Añadir fila de encabezado
        html += "<tr>";
        for (int i = 0; i < dt.Columns.Count; i++)
            html += "<th>" + dt.Columns[i].ColumnName + "</th>";
        html += "</tr>";
        // Añadir filas
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            html += "<tr style='color:blue;'>";
            for (int j = 0; j < dt.Columns.Count; j++)
                html += "<td>" + dt.Rows[i][j].ToString() + "</td>";
            html += "</tr>";
        }
        html += "</table>";
        return html;
    }
    private void SendMailMessage(string From, string SendTo, string Subject, string Body, bool IsBodyHtml, string Server)
    {
        MailMessage htmlMessage;
        SmtpClient mySmtpClient;

        htmlMessage = new MailMessage(From, SendTo, Subject, Body);
        htmlMessage.IsBodyHtml = IsBodyHtml;

        mySmtpClient = new SmtpClient(Server);
        mySmtpClient.Credentials = CredentialCache.DefaultNetworkCredentials;
        mySmtpClient.Send(htmlMessage);
    }
}

}

A continuación se muestra el resultado:

Y el paquete se ve así. Para cada usuario, necesito obtener todos los pedidos y detalles del pedido y enviarlos por correo electrónico. Por lo tanto, tengo el script dentro del bucle.

Anteriormente, recibía un error de deadlock y cambié algunas cosas refiriéndome a diferentes artículos y ahora estoy obteniendo el siguiente error:

Error: 0x1 en la Tarea de script: Referencia a objeto no establecida como instancia de un objeto. La tarea falló: Tarea de script. Advertencia: 0x80019002 en el bucle para cada usuario: Código de advertencia de SSIS DTS_W_MAXIMUMERRORCOUNTREACHED. El método de ejecución se completó correctamente, pero el número de errores generados (1) alcanzó el máximo permitido (1), lo que resulta en un error. Esto ocurre cuando la cantidad de errores alcanza el número especificado en MaximumErrorCount. Cambie MaximumErrorCount o corrija los errores.Retexto. Advertencia: 0x80019002 en SurplusMouse_EmailOrderDetail: Código de advertencia del SSIS DTS_W_MAXIMUMERRORCOUNTREACHED. El método de ejecución se completó correctamente, pero el número de errores generados (1) alcanzó el máximo permitido (1), lo que resulta en un error. Esto ocurre cuando la cantidad de errores alcanza el número especificado en MaximumErrorCount. Cambie MaximumErrorCount o corrija los errores.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “Object reference not set to an instance of an object” suele ocurrir cuando se utiliza una referencia nula donde se espera una referencia de objeto. En el script mostrado, parece que la variable varCollection no se está inicializando antes de usarse para recuperar el valor User::EmailData. Esto podría estar causando el error de referencia nula.

    Para evitar el error de bloqueo, puede ser útil asegurarse de que solo hay una conexión abierta al servidor SQL a la vez. Esto se puede hacer utilizando la propiedad “MaxConcurrentExecutables” en el paquete para limitar el número de conexiones concurrentes.

    Además, puede ser útil verificar si hay otros errores o problemas en el paquete, ya que las advertencias “MaximumErrorCountReached” sugieren que hay otros errores que deben resolverse.

Comments are closed.