FOR XML PATH i atrybut

To jest wpis z rodzaju „dopadło mnie zaćmienie, jak kiedyś będę miał znów problem to zajrzę na bloga, czy nie pisałem na ten temat”.

Przy tworzeniu dokumentu XML za pomocą FOR XML PATH możemy podać nazwę elementu, który ma „opakowywać” każdy zwracany rekord (jeśli nie podamy będzie domyślne <row>). A co jeśli potrzebujemy dodać atrybut do elementu „opakowującego”? Czytaj dalej

Wygeneruj XML z XSD w Visual Studio

Fajną funkcjonalnością Visual Studio Community jest możliwość wygenerowania przykładowego dokumentu XML ze schematu XSD. W tym celu otwieramy plik ze schematem przez standardowe FILE > Open > File lub ikonę Open File na pasku narzędzi (lub naturalnie przez Ctrl+O). Plik otwiera się w trybie projektowania (design) i podpowiada, żeby użyć XML Schema Explorer do obejrzenia schematu. Możemy go uruchomić albo z poziomu podpowiadanego linku, albo przez menu VIEW > XML Schema Explorer (pojawia się w menu tylko jeśli wybrano plik XSD).

GenerateSampleXML

Ponieważ ostatnio na czasie jest temat Jednolitego Pliku Kontrolnego to wygenerujemy plik z tego schematu. Ściągamy przykładowy schemat Magazyn – JK_MAG.xsd i generujemy naciskając na elemencie JPK prawym przyciskiem myszy, po czym wybieramy Generate Sample XML. I mamy błąd.

ErrorSchemaNotResolved

Co zrobić, żeby przykładowy XML dało się wygenerować? Czytaj dalej

Daj Się Poznać 2016 – podsumowanie

Skoro po dłuższej nieobecności na blogu zaczęło się trochę więcej dziać dzięki konkursowi Daj Się Poznać, a dziś – 31 maja – jest ostatni dzień konkursu i wysyp postów podsumowujących to czemu nie napisać kilku słów od siebie? Co się udało, czego się nie udało zrobić i dlaczego. Wpis kompletnie nietechniczny. Trochę po to, żeby było ich więcej niż trzynaście. Zbieżność z liczbą dla niektórych przesądną powiedzmy że przypadkowa. Czytaj dalej

SSIS i BLOB w Azure

Jak załadować plik(i) z serwera do chmury używając SSIS? Niby proste – wystarczy ściągnąć Azure Feature Pack klikając link na stronie z dokumentacją. Do wyboru mamy wtedy Azure Blob Upload Task i wykorzystywane przez niego Azure Storage Connection Manager. Tylko jak to poustawiać? Dokumentacja jest dosyć oszczędna i niewiele wynika np. z wpisu „Specify values for the Storage account name and Account key field” – to znaczy które elementy mam wpisać? Czytaj dalej

Własna kontrolka SSIS – część 10 – DBCommand i parametry

Jedną z zalet używania mało wykorzystywanych rozwiązań jest fakt, że nie wszystko co można zrobić dalej da się znaleźć w Google. Albo da się znaleźć, ale proponowane rozwiązanie nie działa (albo dotyczy wywołania procedury zamiast polecenia SQL). Czyli wracamy do starej dobrej metody prób i błędów. Ot – takie DBCommand użyte jako warstwa abstrakcji ponieważ użyłem OLE DB jako jednego z managerów połączeń może skutkować kilkoma godzinami siedzenia nad jednym krótkim kawałkiem kodu.

Problem jaki się pojawił w przypadku kontrolki to zapis informacji o pobranych plikach w bazie. Samo wywołanie komendy to nic trudnego. Dla uproszczenia przyjmijmy zwykłe polecenie INSERT:

DbCommand cmd = this.connection.CreateCommand();
cmd.CommandText = @"
    INSERT INTO dbo.DownloadedFiles (RemoteFilePath, RemoteDirectoryName, LocalFileName, AuditKey, FileStatusId)
    VALUES ('A', 'B', 'C', 1, 1)
";

cmd.ExecuteNonQuery();

I wszystko gra. Ale jeśli chcemy użyć parametrów, to już jest nieco trudniej. Czytaj dalej

Własna kontrolka SSIS – część 9 – metadane pobierania plików

Pobieranie plików z serwera SFTP za pomocą biblioteki WinSCPNet to nic nadzwyczaj trudnego. Jest dobrze opisujący to przykład wykorzystujący funkcję GetFiles() – nic tylko kopiować i używać. W naszym przypadku będzie z tym nieco więcej roboty bo najpierw musimy określić, które pliki nas interesują, a dopiero potem je pobrać. Żeby określić, które nas interesują musimy najpierw mieć informację o plikach już pobranych – żeby nie pobierać tych zbędnych. Żeby mieć informację o plikach już pobranych musimy najpierw ją gdzieś zapisać. Żeby ją zapisać musimy mieć do tego jakieś struktury. Żeby mieć struktury – po prostu je zbudujmy.
Czytaj dalej

Własna kontrolka SSIS, część 8 – po co mi było to OLEDB?

Od samego początku było jasne: pobieramy dane z serwera SFTP/FTPS/FTP i zapisujemy wszystkie metadane w bazie SQL Server (a potem może pomyślimy czy umożliwimy to też w innej). Do obsługi komunikacji z bazą SQL Server wybrałem arbitralnie OLEDB Connection Manager. Bo w pracy zawodowej używam najczęściej i mam opanowaną pracę z nim.

Tyle, że nie.

Znaczy się – wiem jak go używać i w ogóle. I używam. Z powodzeniem. Ale dotąd jakoś niespecjalnie używałem z poziomu programowania. Bo gdybym używał, to prawdopodobnie bym się nie zdecydował. Z dokumentacji wiedziałbym, że:

Many connection managers return unmanaged COM objects (System.__ComObject) and these objects cannot easily be used from managed code. The list of these connection managers includes the frequently used OLE DB connection manager.

Po prostu bajka. To co, zmieniamy typ managera połączeń np. na ADO.NET i korzystamy z przestrzeni nazw System.Data.SqlClient.SqlConnection, czy kombinujemy jak koń pod górę wiedząc, że jesteśmy być może skazani z góry na niepowodzenie?

No jasne, ja też wybieram to drugie.
Czytaj dalej