我正在嘗試查詢資料庫并發送電子郵件正文中的內容。當我嘗試運行包時,它會引發死鎖錯誤。任何人都可以請建議我缺少什么
腳本如下
#region Namespaces
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("[email protected]", 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'>";
//add header row
html = "<tr>";
for (int i = 0; i < dt.Columns.Count; i )
html = "<th>" dt.Columns[i].ColumnName "</th>";
html = "</tr>";
//add rows
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);
}
}
}
下面是

包裹如下所示。對于每個用戶,我需要獲取所有訂單和訂單詳細資訊,并將其作為電子郵件發送給他們。所以我在回圈中有腳本

早些時候我遇到了死鎖錯誤,我更改了一些參考不同文章的內容,現在我遇到了錯誤
Error: 0x1 at Script Task: Object reference not set to an instance of an object.
Task failed: Script Task
Warning: 0x80019002 at Foreach Loop each User: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. The Execution method succeeded, but the number of errors raised (1) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
Warning: 0x80019002 at SurplusMouse_EmailOrderDetail: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. The Execution method succeeded, but the number of errors raised (1) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
SSIS package
uj5u.com熱心網友回復:
我的猜測是,這是您的錯誤(varCollection 為空并且您參考的內容為空):
var data = varCollection["User::EmailData"].Value;
就像你之前做的那樣分配它......
var data = Dts.Variables["User::EmailData"].Value;
但是,我認為您正在嘗試此操作。電子郵件資料是存盤在物件中的記錄集。這就是你想要的邏輯。
using System.Data.OleDb;
DataTable dt= new DataTable();
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.Fill(dt, Dts.Variables["User::emailData"].Value);
foreach (DataRow row in dt.Rows)
{
//insert what you want to do here
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/371168.html
標籤:C# sql sql-server 姐姐 等
