2015-06-13 2 views
0

Как написать функцию (функцию внешнего, C#, F # или Powershell скрипт, и т.д.)Получить список полей по соединению с плоскими файлами?

List<string> GetFields(string ssisPackageName, string fileSourceName); 

, чтобы получить список полей пакета SSIS? Поскольку пакет является Xml-файлом, может ли xquery использоваться для получения списка?

Или еще лучше, получить более подробную информацию,

class Field 
{ 
    public string Name { get; set; } 
    public string Type { get; set; } 
} 
List<Field> GetFields(string ssisPackageName, string fileSourceName); 
+0

Желание получить определение столбца для конкретного диспетчера соединений с плоским файлом? Я бы подумал, что ваш класс «Поле» недостаточно отражает сложность ввода данных. Если это строка, это ANSI или Unicode? Unicode, 8 или 16? и т.д – billinkc

ответ

0

@billinkc правильно, вы должны иметь проблемы данные набрав в виду. Тем не менее, вы могли бы в лучшем случае получить значения кодовой страницы и Юникода для самого диспетчера подключений к файлу. Следующий код должен начать работу, где вам могут потребоваться некоторые проверки для кодовой страницы и атрибутов типа данных.

string path = @"MyPathTo\Package.dtsx"; 
XNamespace dts = "www.microsoft.com/SqlServer/Dts"; 
XDocument doc = XDocument.Load(path); 

// get all connections 
var connections = from ele in doc.Descendants(dts + "ConnectionManager") 
        where ele.Attributes(dts + "ObjectName").Count() != 0 
        select ele; 

foreach (var connection in connections) 
{ 
    // look for your flat file connection 
    if (connection.Attribute(dts + "ObjectName").Value == "Flat File Connection Manager") 
    { 
     var connectionDetails = connection.Element(dts + "ObjectData").Element(dts + "ConnectionManager"); 
     Console.WriteLine("CodePage: " + connectionDetails.Attribute(dts + "CodePage").Value); 
     Console.WriteLine("Unicode: " + connectionDetails.Attribute(dts + "Unicode").Value); 
     var columnList = connection.Descendants(dts + "FlatFileColumn"); 
     foreach (var column in columnList) 
     { 
      Console.WriteLine("Column name: " + column.Attribute(dts + "ObjectName").Value); 
      Console.WriteLine("Column type: " + column.Attribute(dts + "DataType").Value); 
     } 
    } 
} 
Смежные вопросы