SQL作业无法运行C#.net控制台应用程序

时间:2012-05-21 16:40:05

标签: c# sql-server sql-server-2008 excel excel-vba vba

我有一个简单的excel文件,其中包含以下代码:

Private Sub Workbook_Open()
   MsgBox "Hello World!"
End Sub

我试图运行一个sql作业来打开这个excel文件,但它失败了,变得没有响应。在谷歌上搜索,我找到了“为什么”SQL作业无法打开excel文件的原因 Job On Sql Server Agent does not complete, but it does in BIDS?

所以我想在C#中创建一个简单的控制台应用程序,只需打开excel文件并运行我的宏。这是我的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;
using System.Threading;


namespace T_OpenExcel
{
class Program
{
    static void Main(string[] args)
    {

        Excel.Application xlApp;
        Excel.Workbook xlWorkBook;
        //Excel.Worksheet xlWorkSheet;

        object misValue = System.Reflection.Missing.Value;

        xlApp = new Excel.Application();
        xlWorkBook = xlApp.Workbooks.Open(@"E:\data_extracts\TestHelloWorld.xlsm", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
        RunMacro(xlWorkBook, new Object[] { "TestHello" });


        Thread.Sleep(5000);

        xlWorkBook.Close(true, misValue, misValue);
        xlApp.Quit();
    }

    private static void RunMacro(Excel.Workbook xlWorkBook, object[] p)
    {
        //throw new NotImplementedException();
    }
}
}

我可以在IDE中成功运行此代码。现在我想从SSMS,SQL Server 2008中的SQL作业运行它。

我从我的C#项目中获取了T_OpenExcel.exe文件(T_OpenExcel - > bin - > Debug - > T_OpenExcel.exe)。我创建了一个SQL Job.Here是我的一些细节:

步骤名称:OpenHelloWorldExcel 类型:操作系统(CmdExec) 运行方式:SQL Server代理服务帐户 命令:C:\ Users \ shress2 \ Documents \ visual studio 2010 \ projects \ T_OpenExcel \ T_OpenExcel \ bin \ Debug \ T_OpenExcel.exe

在运行此作业时,我获得以下状态 开始工作'TestHelloWorld'状态成功 执行作业'TestHelloWorld'状态错误

在查看历史记录时,它显示: 信息 以用户身份执行:GSOPS4 \ SYSTEM。未处理的异常:System.Runtime.InteropServices.COMException:Microsoft Excel无法访问文件'E:\ data_extracts \ TestHelloWorld.xlsm'。 有几个可能的原因:
     文件名或路径不存在。      该文件正被另一个程序使用。      您尝试保存的工作簿与当前打开的工作簿具有相同的名称。 at Microsoft.Office.Interop.Excel.Workbooks.Open(String Filename,Object UpdateLinks,Object ReadOnly,Object Format,Object Password,Object WriteResPassword,Object IgnoreReadOnlyRecommended,Object Origin,Object Delimiter,Object Editable,Object Notify,Object Converter,Object AddToMru,Object Local,Object CorruptLoad)位于C:\ Users \ shress2 \ documents \ visual studio 2010 \ projects \ T_OpenExcel \ T_OpenExcel \ Program.cs:第23行中的T_OpenExcel.Program.Main(String [] args)处理退出代码-532462766。步骤失败了。

我检查了E:\ data_extracts \ TestHelloWorld.xlsm目录并发现它正常工作。我确保我的xlsm文件没有被任何人使用。我无法弄清楚为什么它无法运行它。任何帮助是极大的赞赏。谢谢你!

1 个答案:

答案 0 :(得分:1)

问题似乎是您在打开Excel文件时尝试显示消息框,但是您正在自动化它,因此没有人可以单击消息框上的按钮。其余的代码无法执行,因为文件正在那里等待某人点击按钮。

在后续运行中,服务器无法访问它,因为它仍然在那里,对普通用户不可见,等待单击按钮。因此错误。

简短版本:请勿在无人看管的应用上预测用户输入。