-1
我已經在腳本任務中添加了外部的dll文件。當我調試腳本任務時代碼正在工作,但是當我直接執行SSIS包而不進行調試時,代碼不起作用。所以我得到異常已被調用的目標拋出。 ssis錯誤在這。任何人都可以解決這個問題。我已經在GAC中註冊了dll並重新啓動了機器。但它仍然給我這個錯誤異常已被調用的目標拋出。腳本任務
我已經在腳本任務中添加了外部的dll文件。當我調試腳本任務時代碼正在工作,但是當我直接執行SSIS包而不進行調試時,代碼不起作用。所以我得到異常已被調用的目標拋出。 ssis錯誤在這。任何人都可以解決這個問題。我已經在GAC中註冊了dll並重新啓動了機器。但它仍然給我這個錯誤異常已被調用的目標拋出。腳本任務
我很難找到解決這個問題的方法(沒有解決方案的問題已經在這裏發佈了至少幾次)。在閱讀某些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;
}