SQL クエリを実行し、データ フロー タスクを介して csv ファイルにエクスポートする SSIS パッケージがあります。csv が作成された後、SMTP サーバーに接続して csv ファイルを添付ファイルとして送信するように「スクリプト タスク」を設定しました。
私のローカル マシンではパッケージは正常に動作しますが、サーバー上の SQL Server Management Studio に読み込むと、期待どおりに動作しません。SQL Server MS は、パッケージが正常に実行され、csv ファイルが予期された場所に生成されたことを示しています。ただし、「スクリプト タスク」はまったく実行されていないようです。C# スクリプトには、デバッグ目的でファイルに書き込むステートメントをいくつか含めました。1 つは try/catch 例外ブロック用で、もう 1 つは通常の実行用です。
public void Main()
{
string sSubject = "Weekly PAX Test";
string sBody = "Test Message";
int iPriority = 2;
if (SendMail(sSubject, sBody, iPriority))
{
Dts.TaskResult = (int)ScriptResults.Success;
}
else
{
//Fails the Task
Dts.TaskResult = (int)ScriptResults.Failure;
}
}
public bool SendMail(string sSubject, string sMessage, int iPriority)
{
try
{
string sEmailServer = Dts.Variables["User::sEmailServer"].Value.ToString();
string sEmailPort = Dts.Variables["User::sEmailPort"].Value.ToString();
string sEmailUser = Dts.Variables["User::sEmailUser"].Value.ToString();
string sEmailPassword = Dts.Variables["User::sEmailPassword"].Value.ToString();
string sEmailSendTo = Dts.Variables["User::sEmailSendTo"].Value.ToString();
string sEmailSendFrom = Dts.Variables["User::sEmailSendFrom"].Value.ToString();
string sEmailSendFromName = Dts.Variables["User::sEmailSendFromName"].Value.ToString();
string sAttachmentPath = Dts.Variables["User::sAttachmentPath"].Value.ToString();
SmtpClient smtpClient = new SmtpClient();
MailMessage message = new MailMessage();
MailAddress fromAddress = new MailAddress(sEmailSendFrom, sEmailSendFromName);
//You can have multiple emails separated by ;
string[] sEmailTo = Regex.Split(sEmailSendTo, ";");
int sEmailServerSMTP = int.Parse(sEmailPort);
smtpClient.Host = sEmailServer;
smtpClient.Port = sEmailServerSMTP;
System.Net.NetworkCredential myCredentials =
new System.Net.NetworkCredential(sEmailUser, sEmailPassword);
smtpClient.Credentials = myCredentials;
message.From = fromAddress;
if (sEmailTo != null)
{
for (int i = 0; i < sEmailTo.Length; ++i)
{
if (sEmailTo[i] != null && sEmailTo[i] != "")
{
message.To.Add(sEmailTo[i]);
}
}
}
switch (iPriority)
{
case 1:
message.Priority = MailPriority.High;
break;
case 3:
message.Priority = MailPriority.Low;
break;
default:
message.Priority = MailPriority.Normal;
break;
}
//You can enable this for Attachments.
//sAttachmentPath is a string variable for the file path.
Attachment myAttachment = new Attachment(sAttachmentPath);
message.Attachments.Add(myAttachment);
message.Subject = sSubject;
message.IsBodyHtml = true;
message.Body = sMessage;
smtpClient.Send(message);
System.IO.File.WriteAllText("C:\\Users\\SQLCLservice\\SQLServerAgent\\file.txt", "Test");
return true;
}
catch (Exception ex)
{
System.IO.File.WriteAllText("C:\\Users\\SQLCLservice\\SQLServerAgent\\ex.txt", ex.ToString());
return false;
}
}
電子メールは送信されていません - ファイルは書き込まれていません。「成功した実行」にもかかわらず、タスクがまったく実行されていないかのようです。
SQL Server Integration Services 11.0 サービスがローカル マシンで実行されているが、サーバーでは実行されていないことに気付きました。ただし、ローカル マシンでこのサービスを無効にしても、タスクは引き続き実行されます。
他に何か不足していますか?私は SQL Server を初めて使用し、この問題に何日も取り組んできました。
編集: SQL Server 2012 を実行しています
EDIT2:64ビットランタイムをfalseに設定してパッケージを保存し、SQL Serverエージェントを介して32ビットモードで実行しようとしたことにも言及する必要があります。