2012-05-21 1 views
5

Это может быть очень простой вопрос, но я пробовал последние 4-5 часов без успеха. :(Запустить приложение консоли C# из агента SQL Server (Job)?

У меня есть C# консольное приложение, которое просто открывает файл Excel. Это Excel файл имеет Workbook_Open() событие, которое запускает мой макрос. Мой макрос просто переименовывает sheet1 к RenameSheet1 в активном рабочем листе.

I может запустить мой проект C# из IDE.Я хочу запустить этот проект из SQL-заданий (SQL Server 2008) .Как это сделать? Пожалуйста, помогите мне получить эту работу. Спасибо.

Согласно предложениям SilverNinnjas по созданию proxy:

- Создайте учетные данные, содержащие учетную запись домена CORP \ PowerUser1 и ее пароль

CREATE CREDENTIAL PowerUser1 WITH IDENTITY = N'CORP\shress2', SECRET = N'[email protected]' 
GO 
USE [msdb] 
GO 

- Создать новый прокси-сервер под названием ExcelProxy и назначить PowerUser удостоверение к нему

EXEC msdb.dbo.sp_add_proxy 
@proxy_name=N'ExcelProxy', 
@credential_name=N'PowerUser1', 
@enabled=1 

- Грант ExcelProxy доступ к "CmdExec" подсистемы

EXEC msdb.dbo.sp_grant_proxy_to_subsystem 
@proxy_name=N'ExcelProxy', 
@subsystem_name =N'CmdExec' 

- Грант the login testUser Разрешения использовать ExcelProxy

EXEC msdb.dbo.sp_grant_login_to_proxy 
@login_name = N'shress2', 
@proxy_name=N'ExcelProxy' 
GO 

Я все еще получаю ту же ошибку Выполнено как пользователь: CORP \ shress2.

Необработанное исключение: System.Runtime.InteropServices.COMException: Microsoft Excel не может получить доступ к файлу 'E: \ data_extracts \ RenameSheets.xlsm. Существует несколько возможных причин:
Имя файла или путь к нему не существует.
Файл используется другой программой.
Книга, которую вы пытаетесь сохранить, имеет то же имя, что и открытая книга. в 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) в T_OpenExcel.Program.Main (String [] args) в C: \ Users \ shress2 \ documents \ visual studio 2010 \ projects \ T_OpenExcel \ T_OpenExcel \ Program.cs: строка 24. Код выхода процесса -532462766. Не удалось выполнить этот шаг.

Любые причины? Я с нетерпением жду обратной связи. Большое спасибо.

@SilverNinja, вот мой C# код:

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(); 
     xlApp.Visible = true; 
     xlWorkBook = xlApp.Workbooks.Open("\\\\myserver\\data_extracts\\RenameSheets.xlsm", 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 

     xlApp.DisplayAlerts = false; 
     xlWorkBook.SaveAs("\\\\myserver\\data_extracts\\RenameSheets.xlsm", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 


        xlWorkBook.Close(true, misValue, misValue); 
     xlApp.DisplayAlerts = true; 

     xlApp.Quit(); 
    } 

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

Я бы предположил, что учетная запись пользователя, который используется по умолчанию для запуска SQL Server Agent Работа не имеет достаточных прав для взаимодействия с чем-то, что имеет интерактивный графический интерфейс, как в Excel. Использование Aspose.Cells в приложении консоли может быть решением. –

+1

Использует ли ваш проект SQL? Если нет, вам будет лучше с запланированной задачей. – jrummell

+0

Я пробовал использовать планировщик заданий. Там прекрасно работает. Проблема в том, что мы используем SQL JOB для автоматизации процесса загрузки файла excel (в моем случае, когда приложение C# генерирует), в сторонний инструмент отчетности. Это единственная причина, по которой он запускается из задания SQL. Благодарю. – Nemo

ответ

0

Вам просто нужно выбрать соответствующий тип работы в Нов.здн Шаг редактора. Вы можете использовать либо Powershell, либо CmdExec.

В области «Команда» нажмите кнопку . Откройте кнопку, чтобы найти консольное приложение скомпилированного исполняемого файла (exe).

Если у вас есть какие-либо параметры, добавьте их здесь - иначе настройте расписание.

Возможно, вам придется использовать повышенные разрешения. Чтобы использовать повышенные разрешения, просто перейдите к Security-> Credentials в SSMS и щелкните правой кнопкой мыши Новые учетные данные. Затем настройте прокси-счет под кодом Sql Server Agent-> Прокси и щелкните правой кнопкой мыши Новый прокси. Настройте прокси для CmdExec и используйте Учетные данные, которые вы ранее установили. На шаге SQL Agent Job вы можете выбрать эти учетные данные для использования при выполнении вашей команды.

В SQL Работа Step Command Area, вы должны ввести что-то вроде этого:

excel E:\data_extracts\RenameSheets.xlsm 
+0

@SilverNinja, Спасибо за быстрый ответ. Я сделал это, но он не смог. Я использовал CmdExec. В команде: Я указал на exe-файл, который был создан VS 2010 для моего консольного приложения на C#. Это правильно? не работает при выполнении задания. В нем указано Unhandled Exception: System.Runtime.InteropServices.COMException: Microsoft Excel не может получить доступ к файлу «E: \ data_extracts \ RenameSheets.xlsm». Существует несколько возможных причин: имя файла или путь не существует Файл, который вы пытаетесь сохранить, имеет то же имя, что и текущая открытая книга. – Nemo

+0

Вы добавили ** пользовательские учетные данные ** - по умолчанию ** Учетная запись службы SQL Agent ** не может доступ к файловой системе. Вам нужна [учетная запись прокси] (http://www.sqlservercentral.com/Forums/Topic1088319-391-6.aspx#bm1099165). – SliverNinja

+1

@SilverNinja, в области команд, когда я мог бы вставить путь к моему скомпилированному exe, или как вы сказали, что просмотрите файл .exe для моего проекта. Когда я вставляю путь, он выглядит нормально, хотя в конце он не работает. Когда я посмотрел на путь, он дал мне таинственный код. (скопировано здесь -) MZ Это что-то, что вызывает проблему при доступе к файлу? Пожалуйста, дайте мне знать. Благодарю. – Nemo

Смежные вопросы