SSIS脚本任务C#编码dynamicselect具有特定名称的最新Excel文件的第一张

我对C#编码非常陌生。 通过不断的search,我可以得到下面的代码来select包含string“国家”的名称的最新的Excel文件。 现在我需要dynamicselect第一张纸,因为每次我得到一个文件的表名更改。 我修改了代码如下:

public void Main() { // TODO: Add your code here var directory = new DirectoryInfo(Dts.Variables["User::VarFolderPath"].Value.ToString()); FileInfo[] files = directory.GetFiles(); DateTime lastModified = DateTime.MinValue; foreach (FileInfo file in files) { Match m = Regex.Match(file.FullName, "Country"); if (file.LastWriteTime > lastModified && m.Success) { lastModified = file.LastWriteTime; Dts.Variables["User::VarFileName"].Value = file.ToString(); string filename = (string)Dts.Variables["User::VarFileName"].Value; string sheetName = null; string connStr = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"EXCEL 12.0;HDR=YES;\"", filename); var conn = new OleDbConnection(connStr); try { conn.Open(); using (var dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null)) { var row0 = dtSheet.Rows[0]; sheetName = row0["TABLE_NAME"].ToString(); } } catch (Exception) { throw; } finally { conn.Close(); conn.Dispose(); } if (!String.IsNullOrEmpty(sheetName)) { bool dummy = true; Dts.Variables["SheetName"].Value = sheetName; Dts.Events.FireInformation(1, "User::SheetName", sheetName, "", 0, ref dummy); Dts.TaskResult = (int)ScriptResults.Success; } else { Dts.Events.FireError(0, "User::SheetName", "No SheetName found!", String.Empty, 0); Dts.TaskResult = (int)ScriptResults.Failure; } } } MessageBox.Show(Dts.Variables["User::VarFileName"].Value.ToString()); MessageBox.Show(Dts.Variables["User::SheetName"].Value.ToString()); Dts.TaskResult = (int)ScriptResults.Success; } 

但是我收到以下错误:

 在System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj,Object [] parameters,Object [] arguments) 
在System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo culture)
在System.RuntimeMethodHandle.InvokeMethod(对象目标,对象[]参数,签名sig,布尔构造函数)
在System.RuntimeType.InvokeMember(String name,BindingFlags bindingFlags,Binder binder,Object target,Object [] providedArgs,ParameterModifier [] modifiers,CultureInfo culture,String [] namedParams) 
在Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript() 

假设你的文件path是正确的,并且你有足够的文件夹权限; 修改您的代码并添加完整path而不是文件名

  string fullPath = file.FullName; string connStr = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=\"EXCEL 12.0;HDR=YES;\"", fullPath); 

另外,请确保您提到的所有variables都是只读的,或者是根据您在脚本任务中执行的活动进行读写的。

其中一个错误“Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()”是由文件夹上的安全权限引起的。 当您更改权限时,此错误将消失。 我只能记住.dll文件的位置。