繁体   English   中英

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

[英]SQL job failed to run a C#.net console application

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

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

我试图运行一个sql作业来打开此excel文件,但失败了,变得无响应。 在谷歌搜索中,我发现“为什么” SQL作业无法打开excel文件的原因Sql Server Agent上的Job不能完成,但是在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,下面是一些详细信息:

步骤名称: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'。 有几种可能的原因:
文件名或路径不存在。 该文件正在被另一个程序使用。 您要保存的工作簿与当前打开的工作簿具有相同的名称。 在Microsoft.Office.Interop.Excel.Workbooks.Open(字符串文件名,对象更新链接,对象只读,对象格式,对象密码,对象WriteResPassword,对象IgnoreReadOnlyRecommended,对象来源,对象定界符,对象可编辑,对象通知,对象转换器,对象AddToMru,对象本地,对象CorruptLoad)位于C:\\ Users \\ shress2 \\ documents \\ visual studio 2010 \\ projects \\ T_OpenExcel \\ T_OpenExcel \\ Program.cs:line 23中的T_OpenExcel.Program.Main(String [] args)。 -532462766。 该步骤失败。

我检查了E:\\ data_extracts \\ TestHelloWorld.xlsm目录,发现它正常工作。 我确保任何人都不会使用我的xlsm文件。 我不知道为什么它无法运行。 任何帮助是极大的赞赏。 感谢在广告中!

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

在随后的运行中,服务器无法访问它,因为它仍然坐在那里,普通用户看不见,等待按钮被点击。 因此错误。

简短版:请勿整理将在无人值守的情况下运行的应用程序上的用户输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM