Sto cercando di utilizzare SQLXMLBulkLoader4 dal codice C# in un DB SQL 2008. Ma per qualche ragione non inserisce alcuna riga, nonostante non abbia generato alcun errore. Ho utilizzato il bulkload del proprio file ErrorLog (per verificare eventuali errori che potrebbero non causarne il blocco), ma non viene segnalato alcun errore.SQLXML BulkLoader non genera alcun errore ma non viene inserito alcun dato
Ho un file XML scaricato da un fornitore (in pratica un elenco di prodotti), ho scritto un XSD per abbinare i campi al nostro DB. Non c'è nient'altro che scrive su quelle tabelle specifiche e nient'altro che usa quei file.
Il mio codice bulkload appare come segue (I X'ed i valori di stringa di connessione effettiva):
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;
}
}
L'XML assomiglia a questo (ridotta, tutto sotto è solo un altro paio di prodotti-campi e poi più prodotti):
<?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
Il XSD che ho scritto si presenta così (ancora una volta accorciata):
<?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" />
Mi sono fissata cieca nei namespace, ma mi sembrano corretti. (Leggi molti errori simili in cui diversi spazi dei nomi erano la causa). Il codice è in esecuzione dal mio computer, sia il mio computer sia quello con il DB hanno accesso alla cartella di rete con i file XML e XSD.
Ho provato deliberatamente a modificare alcuni nomi di campo in entrambi i file, e il BulkLoader divampa provocando un errore sul campo che ho appena modificato.
Ho confrontato sia il mio codice BulkLoader che l'XSD con esempi che ho trovato in rete, e non riesco a trovare alcuna differenza che possa spiegare questo comportamento.
Probabilmente è qualcosa di semplice che sto trascurando, ma non lo vedo.
Qualsiasi aiuto mi stia indirizzando nella giusta direzione è profondamente accolto.
Grazie in anticipo!
(PS Scusate il post, se è spento, in qualche modo, è la mia prima volta distacco qui, ho fatto fare la mia ricerca comunque e ho provato a seguire le linee guida su come inserire =))
Questo era il biglietto! G'dang namespaces rovinando la mia giornata ... Grazie per la rapida risposta! =) – MrWizard