SSIS използва задача за скрипт - Конвертиране на XLS в CSV

Използвам компонент на C# скриптова задача за конвертиране на XLS в CSV файл, моята входна точка е зададена на ScriptMain

Но постоянно получавам грешка „Грешка: Не може да се изпълни скрипт, защото входната точка на скрипта е невалидна.“

/*
   Microsoft SQL Server Integration Services Script Task
   Write scripts using Microsoft Visual C# 2008.
   The ScriptMain is the entry point class of the script.
*/

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.IO;
using System.Data.OleDb;

namespace ST_1feb807359714c80ae0bdd964110df59.csproj
{
    [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {

        #region VSTA generated code
        enum ScriptResults
        {
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        };
        #endregion

        /*
        The execution engine calls this method when the task executes.
        To access the object model, use the Dts property. Connections, variables, events,
        and logging features are available as members of the Dts property as shown in the following examples.

        To reference a variable, call Dts.Variables["MyCaseSensitiveVariableName"].Value;
        To post a log entry, call Dts.Log("This is my log text", 999, null);
        To fire an event, call Dts.Events.FireInformation(99, "test", "hit the help message", "", 0, true);

        To use the connections collection use something like the following:
        ConnectionManager cm = Dts.Connections.Add("OLEDB");
        cm.ConnectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;";

        Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.

        To open Help, press F1.
    */


        static void Main(string[] args)
        {

            string sourceFile, worksheetName, targetFile;

            sourceFile = "C:\\NewFolder\\Sample.xls"; worksheetName = "sheet1"; targetFile = "C:\\NewFolder\\target.csv";

            convertExcelToCSV(sourceFile, worksheetName, targetFile);

        }
        static void convertExcelToCSV(string sourceFile, string worksheetName, string targetFile)
        {

            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sourceFile + ";Extended Properties=\" Excel.0;HDR=Yes;IMEX=1\"";

            OleDbConnection conn = null;

            StreamWriter wrtr = null;

            OleDbCommand cmd = null;

            OleDbDataAdapter da = null;

            try
            {

                conn = new OleDbConnection(strConn);

                conn.Open();



                cmd = new OleDbCommand("SELECT * FROM [" + worksheetName + "$]", conn);

                cmd.CommandType = CommandType.Text;

                wrtr = new StreamWriter(targetFile);



                da = new OleDbDataAdapter(cmd);

                DataTable dt = new DataTable();

                da.Fill(dt);



                for (int x = 0; x < dt.Rows.Count; x++)
                {

                    string rowString = "";

                    for (int y = 0; y < dt.Columns.Count; y++)
                    {

                        rowString += "\"" + dt.Rows[x][y].ToString() + "\",";

                    }

                    wrtr.WriteLine(rowString);

                }

                Console.WriteLine();

                Console.WriteLine("Done! Your " + sourceFile + " has been converted into " + targetFile + ".");

                Console.WriteLine();

            }

            catch (Exception exc)
            {

                Console.WriteLine(exc.ToString());

                Console.ReadLine();

            }

            finally
            {

                if (conn.State == ConnectionState.Open)

                    conn.Close();

                conn.Dispose();

                cmd.Dispose();

                da.Dispose();

                wrtr.Close();

                wrtr.Dispose();

            }

        }

    }
}

person user1570210    schedule 24.07.2013    source източник
comment
Четейки тук, което изглежда много подобно на вашия случай, Уверете се, че в редактора на задачата на скрипта свойството Entry Point на страницата Script е зададено на ScriptMain. social.msdn.microsoft.com/Forums/sqlserver/en-US/ . Или както човекът в тази връзка публикува, той зададе входната си точка на Main и я накара да работи. Не съм сигурен кое е решението, тъй като и двете бяха проверени.   -  person Bearcat9425    schedule 24.07.2013
comment
МОЯТА входна точка е зададена на ScriptMain, не знам защо се случва това   -  person user1570210    schedule 24.07.2013
comment
Какво се случва, когато го настроите само на Main?   -  person Bearcat9425    schedule 24.07.2013
comment
Имате грешка във вашето присвояване на strConn Excel.0 трябва да бъде Excel 8.0   -  person billinkc    schedule 24.07.2013
comment
Промених входната точка на Main, но все още получавам грешка: Не може да се изпълни скрипт, защото входната точка на скрипта е невалидна.   -  person user1570210    schedule 24.07.2013


Отговори (1)


Вярвам, че вашият проблем е, че тъй като сте декларирали Main като статичен.

Ако използвах следното в тялото на частичния клас ScriptMain

    static void Main()
    {
        // Look ma, script entry point is invalid!
    }

Генерира се следната грешка

SSIS пакет "Package.dtsx" стартира. Грешка: 0x1 при задача на скрипт: Не може да се изпълни скрипт, защото входната точка на скрипта е невалидна. Задачата е неуспешна: Скриптова задача

Входната точка е методът с име Main, който е екземпляр на класа. Някой по-запознат с C# не се колебайте да ме коригира това Чрез добавяне на статичен спецификатор има само един метод Main, независимо от това колко екземпляра на класа ScriptMain има.

    public void Main()
    {
        string sourceFile, worksheetName, targetFile;
        sourceFile = "C:\\NewFolder\\Sample.xls"; 
        worksheetName = "sheet1"; 
        targetFile = "C:\\NewFolder\\target.csv";

        convertExcelToCSV(sourceFile, worksheetName, targetFile);
        Dts.TaskResult = (int)ScriptResults.Success;
    }
person billinkc    schedule 24.07.2013