Я пытаюсь создать пакет служб SSIS для чтения из Excel. Я нашел отличный пример здесь , который очень близок к тому, что мне нужно.
Мой вопрос здесь следующий: начиная с пустого решения, каковы минимальные минимальные шаги, необходимые для получения C# Компонент скрипта для чтения из файла .xlsx?
Вот мой код:
using System;
using System.Data;
using System.Data.OleDb;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
public override void CreateNewOutputRows()
{
string fileName = @"E:\SFTP\RSS\Results.xlsx";
string cstr = "Provider.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
using (OleDbConnection xlConn = new OleDbConnection(cstr))
{
xlConn.Open();
OleDbCommand xlCmd = xlConn.CreateCommand();
xlCmd.CommandText = "Select top 10 * from Responses";
xlCmd.CommandType = CommandType.Text;
using (OleDbDataReader rdr = xlCmd.ExecuteReader())
{
while (rdr.Read())
{
for (int i = 2; i < rdr.FieldCount; i++) //loop from 3 column to last
{
Output0Buffer.AddRow();
Output0Buffer.Question = rdr.GetName(i);
Output0Buffer.Response = rdr.ToString();
}
}
}
xlConn.Close();
}
}
}
У меня возникают такие вопросы и вопросы, которые у меня возникают: Нужно ли настраивать диспетчер соединений на уровне решения? В компоненте сценария или код содержит все, что мне нужно?
Какой тип данных / функцию / метод я использую, чтобы прочитать ячейку как число, дату или строку?
Вот некоторые ошибки, которые я получаю:
(2,14): error CS0234: The type or namespace name 'Data' does not exist in the namespace 'System' (are you missing an assembly reference?)
(3,14): error CS0234: The type or namespace name 'Data' does not exist in the namespace 'System' (are you missing an assembly reference?)
(4,17): error CS0234: The type or namespace name 'SqlServer' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
(5,17): error CS0234: The type or namespace name 'SqlServer' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
(8,27): error CS0246: The type or namespace name 'UserComponent' could not be found (are you missing a using directive or an assembly reference?)
+ additional 10 errors
Я использую: VS2019, SQL Server 2016 SP2, Office 2016.
Вот снимок экрана моего листа Excel:
Содержит ответы на опросы, предоставленные сторонним колл-центром. Есть несколько столбцов для идентификации вызова, а затем каждый заголовок столбца содержит вопрос, а данные столбца - это ответ. В настоящее время он имеет 189 столбцов и будет расти / меняться со временем. Моя идея состоит в том, чтобы выбрать первые 4 столбца, которые надежно идентифицируют каждую строку, плюс 1 дополнительный столбец для каждого вопроса и ответов, и итерировать по листу, подбирая каждый заголовок и содержимое столбца, чтобы их можно было вставить в таблицу. По мере добавления столбцов они добавляются в виде дополнительных строк. Код примера, который я вставил, показывает только 2 столбца, поскольку я старался сделать пример простым.
Это то, что я пробовал. 1. Добавьте задачу DataFlow в поток управления.
Добавление компонента сценария в DataFlow.
При появлении запроса выберите Источник.
Дважды щелкните и откройте редактор.
Выберите Диспетчер соединений. Нажмите Добавить
В новой строке выберите Новое подключение,
Появится новый диспетчер подключений служб SSIS.
Это то, где я застрял. Я выбираю соединение OLEDB.
Что выбрать в диспетчере соединений OLEDB?
Я пробовал Access и MS Oledb Simple Provider. И тут начинают разворачиваться вещи. Учитывая, что имя файла, путь и драйвер указаны в скрипте, какие данные мне нужны для диспетчера соединений?
Я начал играть с кодом, но я понятия не имею, работает ли то, что я сделал в апстриме или правильно. Поэтому я пытаюсь начать с самого начала. Я прошу помощи, пройдя шаги по установке, чтобы добраться до C#.
Спасибо всем за ответы.
Приветствия
Пит