2013-07-11 6 views
-2
  • У меня есть 10 плоских файлов (формат .dat) в папке, которые необходимо загружать в базу данных каждый день в назначенное время.
  • Вся информация, связанная с файлами, присутствует в базе данных, такой как имя файла, путь к файлу, имя таблицы, имена столбцов и разделитель.
  • Нам нужно проверить, существует ли файл или нет, если нет, необходимо зарегистрировать запись «Файл не найден».
  • Если файл существует, ему необходимо проверить запись трейлера (последняя запись в файле, в которой указано: Count = 00001000, это должно быть количество записей в этом конкретном файле).
  • Если запись трейлера не существует, необходимо зарегистрировать запись «Нет записи трейлера». Если в записи трейлера указано нулевое значение, тогда запись в журнале должна быть сделана «Нулевой подсчет», а также, если подсчеты файл не соответствует записи в журнале, «Count несоответствие».
  • Если все условия выполнены, данные необходимо загрузить в базу данных для каждого файла.

Просьба предложить свои идеи для реализации вышеуказанного сценария. Благодаря!!!SSIS загрузка файла по условиям проверки

+0

Извините, что ... но в основном вы говорите - вот мой проект, пожалуйста, сделайте это для меня. Хорошая часть заключается в том, что вы четко понимаете требования. Теперь просто возьмите одну штуку за раз, попробуйте реализовать, и если вы застряли, вернитесь назад. Ложка кормления будет только повредить вам в долгосрочной перспективе. С наилучшими пожеланиями ... –

ответ

0

Следующее решение может помочь вам решить проблему.

Используйте для каждого контейнера с контуром "Item" enumerator. Поскольку у вас 10 файлов, и если что-то не хватает, вам нужно поднять, тогда вы должны это использовать. Перечислитель файлов просто перебирает файлы, не вызывает никаких ошибок.

Ниже приведены шаги.

Создайте следующий пакет SSIS с переменными.

  1. FileFullPath
  2. IsValidated

Для каждого перечислителем петли должны быть настроены как следующие скриншоты.

Configuartion в коллекции: enter image description here

конфигурации в разделе Variable enter image description here

Внутри контейнера есть задача сценария. вы должны упомянуть FileFullPath как переменную readonly и IsValidate как чтение и запись, как на следующем экране.

enter image description here

Нажмите кнопку Изменить сценарий и вставьте следующий код.

public void Main() 
{ 
     Dts.Variables["IsValidated"].Value = true; 

     string fileFullPath = Dts.Variables["FileFullPath"].Value.ToString(); 

      if (!File.Exists(fileFullPath)) 
      { 
        var msg = String.Format("File is not available in location : {0}", fileFullPath); 
        Dts.Events.FireError(0, "Dat file loading", msg, string.Empty, 0); 
        Dts.TaskResult = (int)ScriptResults.Failure; 
      } 

      //Read last line 
      String lstLine = File.ReadLines(fileFullPath).Last(); 

      int totalCount = 0; 
      bool talierExists = int.TryParse(lstLine, out totalCount); 

      if (!talierExists) 
      { 
        var msg = String.Format("No tailer row found and last line is : {0}", lstLine); 
        Dts.Events.FireError(0, "Dat file loading", msg, string.Empty, 0); 
        Dts.TaskResult = (int)ScriptResults.Failure; 
      } 

      //Total count 
      int fullCount = File.ReadLines(fileFullPath).Count(); 

      if (fullCount != totalCount) 
      { 
        var msg = String.Format("No of count is not matching, tailer count = {0} and full count={1}"); 
        Dts.Events.FireError(0, "Dat file loading", msg, string.Empty, 0); 
        Dts.TaskResult = (int)ScriptResults.Failure; 
      } 

      Dts.Variables["IsValidated"].Value = true; 

      Dts.TaskResult = (int)ScriptResults.Success; 
} 

После этого у вас есть поток данных. Подключите задачу сценария к потоку данных и щелкните правой кнопкой мыши на соединителе и перейдите к редактированию и настройке следующим образом.

enter image description here

Ваш пакет SSIS будет, как выглядит следующим образом.

enter image description here

Надеется, что это помогает!

+0

Большое спасибо за ваш ответ. У меня есть пара сомнений. прежде чем я повторяю файлы в контейнере foreach, мне нужно проверить, присутствуют ли все файлы в папке или нет. Для этого у меня есть таблица, которая содержит имена файлов и другую соответствующую информацию. Итак, как я могу проверить, сравнив его с таблицей? – user1429135

+0

Итак, у вас есть задача Execute SQL [с 'Select fileInfo from '] и сохраните результат в переменной объекта. Теперь вы можете использовать перечислитель ADO.NET для каждого цикла для итерации по таблице. Что касается файлов, которые уже обрабатываются в вышеуказанном коде .. – Gowdhaman008

+0

Также вы можете посоветовать нам, можем ли мы загружать каждый файл в соответствующую таблицу с помощью цикла foreach? – user1429135

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