我正在尝试将 C# 代码中的 SQLXMLBulkLoader4 用于 SQL 2008 DB。但是由于某种原因,尽管没有抛出任何错误,但它根本不会插入任何行。我使用了 bulkloads 自己的 ErrorLog 文件(检查可能不会导致崩溃的任何错误),但没有报告错误。
我有一个从供应商处下载的 XML 文件(基本上是产品列表),我编写了一个 XSD 以将字段与我们的数据库匹配。没有其他任何东西写入这些特定的表,也没有使用这些文件。
我的 BulkLoad 代码如下所示(我删除了实际的连接字符串值):
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 看起来像这样(精简,下面的所有内容只是更多的产品字段,然后是更多的产品):
<?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 看起来像这样(再次缩短):
<?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" />
我对命名空间视而不见,但它们对我来说是正确的。(阅读许多类似的错误,其中不同的名称空间是原因)。代码在我的计算机上运行,我的计算机和带有数据库的计算机都可以访问包含 XML 和 XSD 文件的网络文件夹。
我已经尝试故意更改两个文件中的一些字段名称,并且 BulkLoader 突然在我刚刚更改的字段上引发错误。
我已经将我的 BulkLoader 代码和 XSD 与我在网上找到的示例进行了比较,但我找不到任何可以解释这种行为的差异。
我可能很容易忽略它,但我只是没有看到它。
任何为我指明正确方向的帮助都深受欢迎。
先感谢您!
(PS对不起,如果帖子以某种方式关闭,这是我第一次在这里发帖,但是我确实做了我的研究,我确实尝试遵循关于如何发布的指南=))