【问题标题】:Can't get windows task scheduler to run scheduled console application无法让 Windows 任务计划程序运行计划的控制台应用程序
【发布时间】:2009-06-22 18:41:43
【问题描述】:

我有一个控制台应用程序,它使用两个批处理文件来解压缩一个 zip 文件,将解压缩的 xls 转换为 CSV 并将数据 BCP 转换为 SQL 表。我想安排这个控制台应用程序每天运行一次。我设置了 Windows 任务计划程序来运行所述应用程序。我尝试“测试运行”任务并且没有收到错误。当捕获到异常时,我让应用程序写入 txt 文件,并且出现“您尝试使用的 xls 文件正在被另一个进程使用”的错误。

注意:我知道有更有效的方法可以将 xls 导入 SQL,但它适用于购买完整版 SQL SERVER 的客户。

【问题讨论】:

  • 第一个批处理文件使用 7zip (7z.exe x C:\BCP\RFSR.zip -aoa -oC:\BCP\ -ppassword) del c:\BCP\RFSR.csv* 运行。 * /q
  • 第二批使用 BCP 将 CSV 复制到 SQL 数据库中。 (bcp server.dbo.test in c:\BCP\RFSR.csv -F2 -t, -c -S server -U 用户名 -P 密码)

标签: batch-file dos bcp scheduled-tasks


【解决方案1】:

某些内容尚未释放它对 XML 文件的保留。您需要弄清楚其他程序正在使用该资源并确保它的连接已关闭。可能是在你的测试运行中你没有关闭你的连接,然后当任务运行时,有另一个进程(你的应用程序的早期实例)没有释放资源。

【讨论】:

    【解决方案2】:

    听起来您正在尝试在完全解压缩之前使用 xml 文件。还要检查 rie819 之前提到的可能性。

    如果您发布脚本,我们可以为您提供更好的帮助。

    【讨论】:

    • 导入系统导入 System.Diagnostics 导入 Microsoft.Office.Interop 导入 System.Data.SqlClient 导入 System.Data.OleDb 导入 System.IO 导入 System.Text 模块 Module1 Dim currentDir As String = System.Environment .CurrentDirectory.ToString Sub main() callRFSRDecompressBatch() ExcelToCVS() callBCPCSVBatch() End Sub
    • Sub ExcelToCVS() Dim StrConn As String Dim DA As New OleDbDataAdapter Dim DS As New DataSet Dim Str As String Dim ColumnCount As Integer Dim OuterCount As Integer Dim InnerCount As Integer Dim RowCount As Integer Try StrConn = " Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\BCP\RFSR.XLS;Extended Properties=Excel 8.0;"
    • Dim objConn As New OleDbConnection(StrConn) Try objConn.Open() If objConn.State = ConnectionState.Closed Then Else End If Catch ex As Exception logError(ex) Exit Sub End Try Dim objCmd As New OleDbCommand("Select * from [rfsr$]", objConn) objCmd.CommandType = CommandType.Text Dim ObjStreamWriter As StreamWriter ObjStreamWriter = New StreamWriter("c:\BCP\RFSR.CSV")
    • 尝试 DA.SelectCommand = objCmd DA.Fill(DS, "XLData") 捕获 ex 作为异常 logError(ex) End Try RowCount = DS.Tables(0).Rows.Count ColumnCount = DS。 Tables(0).Columns.Count Str = "" For i As Integer = 0 To ColumnCount - 1 Str &= DS.Tables(0).Columns(i).ColumnName & "," Next ObjStreamWriter.WriteLine(Str)
    • For OuterCount = 0 To RowCount - 1 Str = "" For InnerCount = 0 To ColumnCount - 1 If DS.Tables(0).Rows(OuterCount).Item(InnerCount).ToString.Contains( ",") 然后 Str &= DS.Tables(0).Rows(OuterCount).Item(InnerCount).ToString.Replace(",", ".") Str &= "," Else Str &= DS.Tables (0).Rows(OuterCount).Item(InnerCount) & "," End If Next 'Str &= "," ObjStreamWriter.WriteLine(Str) Next
    【解决方案3】:

    我找到了一种方法来产生我需要的结果。我从控制台应用程序中取出了两个批处理文件。我现在有一个任务计划运行一个批次、控制台应用程序和最后一个批次。我收到的两个答案都是正确的,它没有释放 XML,因为控制台窗口在执行过程中打开。由于它们已被删除,我不再有错误。谢谢您的帮助。 -Z

    【讨论】:

      猜你喜欢
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 2018-07-17
      • 2022-01-14
      相关资源
      最近更新 更多