-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;
}