2015-12-22 2 views
1

При получении пакета SSIS я получил следующее сообщение об ошибке. Задача скрипта используется Microsoft Visual C# 2008. Можете ли вы помочь мне решить проблему?Сообщение об ошибке сценария SSIS

спасибо! Я также прикрепить сообщение об ошибке:

Error: 2015-12-22 02:58:08.28 
    Code: 0x00000001 
    Source: Script Task 
    Description: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation. Specify the ServiceNotification or DefaultDesktopOnly style to display a notification from a service application. 
    at System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, Boolean showHelp) 
    at System.Windows.Forms.MessageBox.Show(String text) 
    at ST_d27b216cd7d64713b54c81f6ac28d805.csproj.ScriptMain.Main() 
    --- End of inner exception stack trace --- 
    at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) 
    at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
    at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) 
    at System.Type.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, CultureInfo culture) 
    at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript() 
End Error 
DTExec: The package execution returned DTSER_FAILURE (1). 

C# код:

using System; 
using System.Data; 
using Microsoft.SqlServer.Dts.Runtime; 
using System.Windows.Forms; 

namespace ST_d27b216cd7d64713b54c81f6ac28d805.csproj 
{ 
    [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")] 
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase 
    { 

     #region VSTA generated code 
     enum ScriptResults 
     { 
      Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success, 
      Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure 
     }; 
     #endregion 

     public void Main() 
     { 
      // TODO: Add your code here 
      System.IO.FileInfo fi; 
      String FilePath = null; 

      DateTime ModifiedTime = (DateTime)Dts.Variables["File_Modified"].Value; 


      DateTime LoadDate = (DateTime)Dts.Variables["File_Last_Load_Date"].Value; 

      Dts.Variables["isModified"].Value = false; 


      FilePath = Dts.Variables["SourceFolder"].Value.ToString(); 
      ModifiedTime = System.IO.File.GetLastWriteTime(FilePath); 

      Dts.Variables["File_Modified"].Value = ModifiedTime; 
      // fi.LastWriteTime; 
      int result = DateTime.Compare(ModifiedTime, LoadDate); 

      if (result > 0) 
      { 
        MessageBox.Show("File Modified after last load in staging"); 
       Dts.Variables["isModified"].Value = true; 
      } 
      else 
      { 
       MessageBox.Show("file is not modified since last load"); 
       Dts.Variables["isModified"].Value = false; 
      } 

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

ответ

0

возникает ошибка, потому что ваша задача скрипт пытается отобразить окно и показывает модальное диалоговое окно или форму, когда приложение не работает в режиме UserInteractive, это не действительная операция. Поэтому, если вы хотите вывести сообщение, вы можете вместо этого использовать Dts.Log, более подробную информацию см. В документации MSDN.

+0

Большое вам спасибо за вашу помощь, Жако! Я удалю две строки messageBox.Show(), так как код называется заданием SQL. Я думаю, этого будет достаточно, чтобы решить проблему. – Ice

0

сообщение об ошибке извлекается из вашего стека следа:

Отображения модального диалогового окна или форму, когда приложение не работает в режиме UserInteractive не действует операция. Укажите стиль ServiceNotification или DefaultDesktopOnly, чтобы отобразить уведомление из приложения-службы.

Вы должны помнить, что, хотя при отладке пакета служб SSIS у вас есть хороший интерфейс (СТАВКИ или инструменты SQL Server оболочки в зависимости от среды), но на самом деле он не предназначен, чтобы быть иметь пользовательский интерфейс. Что бы вы ожидали, когда этот пакет будет развернут на сервер и вызван SQL Job? То есть, где появится окно сообщения? Кто бы нажал «ОК», чтобы возобновить поток?

Вы, вероятно, хотите просто fire an information event, если вы хотите, чтобы получить возможность отправлять обратную связь, что-то вроде:

bool fireAgain = false; 
Dts.Events.FireInformation(0, "Script Task", "File Modified after last load in staging", String.Empty, 0, ref fireAgain); 
+0

Большое спасибо за вашу помощь, GarethD! Я удалю две строки messageBox.Show(), так как код называется заданием SQL. Я думаю, этого будет достаточно, чтобы решить проблему. – Ice

Смежные вопросы