2016-09-02 62 views
-1

我已經在腳本任務中添加了外部的dll文件。當我調試腳本任務時代碼正在工作,但是當我直接執行SSIS包而不進行調試時,代碼不起作用。所以我得到異常已被調用的目標拋出。 ssis錯誤在這。任何人都可以解決這個問題。我已經在GAC中註冊了dll並重新啓動了機器。但它仍然給我這個錯誤異常已被調用的目標拋出。腳本任務

回答

0

我很難找到解決這個問題的方法(沒有解決方案的問題已經在這裏發佈了至少幾次)。在閱讀某些DBF時,它與.NET中的VFP OLEDB數據提供者有關。

顯然,問題源於VFP允許您從小數點右側取數字並在左側使用它們的方式。例如,如果列被定義爲N(5,3),它應該只保存數字9.999,但如果您不需要小數點右側的所有三位小數位,則可以使用剩下的空格爲左側的數字。所以這個專欄將保持999.9!在任何情況下,它都會引發InvalidOperationException。這可以防止您使用DataAdapter的Fill()方法讀取數據。解決方法是使用數據讀取器,從頭開始構建數據表並填充每一列中的每一列,每行一列。發生異常時,爲該值插入空值。以下是一些C#2.0代碼:

public DataTable GetVfpDataTable(string dbfFullPath) 
{ 
    string sqlString = "SELECT * FROM " + Path.GetFileName(dbfFullPath); 
    OleDbConnection oleConn = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=" + 
     Path.GetDirectoryName(dbfFullPath) + ";Collating Sequence=MACHINE;"); 

    OleDbCommand oleCmd = new OleDbCommand(sqlString, oleConn); 
    OleDbDataReader oleReader; 
    DataColumn col; 
    DataRow row; 

    DataTable dbfTable = new DataTable(); 

    try 
    { 
     oleConn.Open(); 
     //Bug in VFP OLE Data Adapter blows up with error 
     // "The provider could not determine the decimal value..." 
     // must read with a data reader row by row, column by column 

     oleReader = oleCmd.ExecuteReader(); 
     for (int i = 0; i < oleReader.FieldCount; i++) 
     { 
      col = new DataColumn(oleReader.GetName(i), oleReader.GetFieldType(i)); 
      dbfTable.Columns.Add(col); 
     } 

     while (oleReader.Read()) 
     { 
     row = dbfTable.NewRow(); 
     for (int i = 0; i < oleReader.FieldCount; i++) 
     { 
      try 
      { 
       row[i] = oleReader[i]; 
      } 
      catch (InvalidOperationException) 
      { 
      row[i] = DBNull.Value; //work-around for VFP OLEDB Provider glitch 
      } 
     } 

     dbfTable.Rows.Add(row); 
     } 

    } 
    catch (Exception eX) 
    { 
     throw new FileLoadException("Error Importing From VFP File\n" + 
      eX.Message + "\nVFPDataAccess.cs:GetVfpDataTable()", dbfFullPath); 
    } 
    finally 
    { 
     oleConn.Close(); 
    } 

    return dbfTable; 
} 
相關問題