2013-07-24 3 views
1

Я использую компонент задачи # скрипт C для преобразования XLS в CSV-файл, моя точка входа устанавливается ScriptMainSSIS с помощью задачи сценария - Преобразование XLS в CSV

Но я постоянно получаю ошибку «Ошибка: Не удается выполнить сценарий, потому что точка входа в скрипт недействительна ».

/* 
    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(); 

      } 

     } 

    } 
} 
+1

Чтение здесь, которое выглядит очень похоже на ваш случай. Убедитесь, что в редакторе задачи сценария свойство Entry Point Script Script установлено в ScriptMain. http://social.msdn.microsoft.com/Forums/sqlserver/en-US/dc15ea13-4b5d-45bd-b6b9-965de144a24c/cannot-execute-script-because-the-script-entry-point-is-invalid. Или, как сказал парень в этой ссылке, он установил свой пункт входа в Main и получил его работу. Не уверен, что было решением, поскольку они были проверены. – Bearcat9425

+0

МОЯ точка входа установлена ​​в ScriptMain, не знаю, почему это происходит – user1570210

+0

Что происходит, когда вы устанавливаете его только в Main? – Bearcat9425

ответ

0

Я считаю, что ваша проблема в том, что, поскольку у вас есть Основная, объявленная как статическая.

Если бы я использовал следующий внутри тела частичного класса ScriptMain

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

генерируется следующая ошибка

SSIS package "Package.dtsx" starting. Error: 0x1 at Script Task: Cannot execute script because the script entry point is invalid. Task failed: Script Task

точка входа метод с именем Main, который является экземпляром класс. Кто-то более разбирающийся в C#, не стесняйтесь меня исправить Добавляя статический спецификатор, существует только один Основной метод, независимо от количества экземпляров класса 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; 
    } 
Смежные вопросы