Próbuję użyć SQLXMLBulkLoader4 z kodu C# do w SQL 2008 DB. Ale z jakiegoś powodu nie wstawia żadnych wierszy, mimo że nie popełnia żadnego błędu. Korzystam z własnego pliku ErrorLog w bulkloads (w celu sprawdzenia wszelkich błędów, które nie powodują jego awarii), ale nie zgłoszono błędu.SQLXML BulkLoader nie rzuca żadnego błędu, ale dane nie są wstawiane
Mam plik XML, który jest pobierany od dostawcy (w zasadzie listę produktów), napisałem XSD dopasować pola do naszych DB. Nie ma nic innego, co piszą do tych konkretnych tabel i nic więcej z tych plików.
Mój kod BulkLoad wygląda następująco (I X'ed się rzeczywiste wartości ciągów połączenia):
public void Bulkload(string schemaFile, string xmlFile, string source)
{
SQLXMLBULKLOADLib.SQLXMLBulkLoad4 bulkload = new SQLXMLBULKLOADLib.SQLXMLBulkLoad4();
try
{
bulkload.ConnectionString = "Provider=sqloledb;server=X;database=X;uid=X;pwd=X";
bulkload.ErrorLogFile = k_ArticleInfoDirectory + source + "BulkLoadError.log";
bulkload.KeepIdentity = false;
bulkload.Execute(schemaFile, xmlFile);
}
catch (Exception e)
{
Console.WriteLine("Fel i BL: " + e);
throw;
}
finally
{
bulkload = null;
}
}
XML wygląda następująco (okrojona, wszystko poniżej to tylko kilka kilku grup produktowych pola i potem coraz produkty):
<?xml version="1.0" encoding="utf-8"?>
<GetProductsResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Status xmlns="http://schemas.servicestack.net/types">
<Code>0</Code>
<Message>Ok</Message>
</Status>
<NumberOfProducts xmlns="http://schemas.servicestack.net/types">9826</NumberOfProducts>
<Products xmlns="http://schemas.servicestack.net/types">
<Product>
<ProductID>1000002</ProductID>
<CreatedDate>2011-11-24 15:54</CreatedDate>
<UpdatedDate>2011-11-24 15:54</UpdatedDate>
<Title>Vi tolererar inga förlorare - klanen Kennedy</Title>
<Publisher>Piratförlaget</Publisher>
... And some more fields per Product
XSD pisałem wygląda następująco (ponownie skrócić):
<?xml version="1.0" encoding="iso-8859-1"?>
<xs:schema targetNamespace="http://schemas.servicestack.net/types" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xs:annotation>
<xs:appinfo>
<sql:relationship name="Status"
parent="tblElibProduct"
parent-key="id"
child="tblElibStatus"
child-key="product_id" />
... + Several other sql:relationships
</xs:appinfo>
</xs:annotation>
<xs:element name="GetProductsResult" sql:is-constant="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Status" sql:is-constant="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Code" type="xs:integer" minOccurs="0" />
<xs:element name="Message" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="NumberOfProducts" type="xs:string" sql:is-constant="1"/>
<xs:element name="Products" sql:is-constant="1">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Product" sql:relation="tblElibProduct">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="CreatedDate" type="xs:date" sql:field="created_date" />
<xs:element minOccurs="1" maxOccurs="1" name="UpdatedDate" type="xs:date" sql:field="updated_date" />
<xs:element minOccurs="1" maxOccurs="1" name="Title" type="xs:string" sql:field="title" />
Wpatrywałem się ślepo w przestrzeń nazw, ale wyglądają one właściwie. (Przeczytaj o wielu podobnych błędach, w których przyczyną były różne przestrzenie nazw). Kod jest uruchamiany z mojego komputera, zarówno mój komputer, jak i ten z DB mają dostęp do folderu sieciowego z plikami XML i XSD.
Próbowałem celowo zmieniając niektóre pola nazwy w obu plikach, a BulkLoader wybucha rzuca błąd na polu Właśnie zmienił.
Mam porównaniu zarówno mój kod BulkLoader i XSD do przykładów znalazłem w internecie, i nie mogę znaleźć żadnej różnicy, która stanowiłaby dla tego zachowania.
To chyba coś łatwego, ale nie widzę tego w banku.
Każda pomoc na wszystkich wskazujące mnie we właściwym kierunku, jest głęboko mile widziane.
Z góry dziękuję!
(PS Przepraszam, jeśli post jest wyłączony w jakiś sposób, to mój pierwszy raz delegowania tutaj, zrobiłem moje badania jednak i starał się postępować zgodnie ze wskazówkami, jak pisać =))
To był bilet! Przestrzenie nazw G'dang rujnują mój dzień ... Dziękuję za szybką odpowiedź! =) – MrWizard