【发布时间】:2016-07-03 20:53:15
【问题描述】:
我正在尝试将一个 XML 文件读入一个已经存在的数据库表中。
问题在于 XML 标记和数据库列的名称不同,尽管它们具有相同的数据类型。因此,我想将 XML 标记“翻译”到数据库列中,以便对数据库的输入成为可能。
我不知道该怎么做。
这是我到目前为止所做的。
static void writeToDatabase()
{
XmlDocument doc= new XmlDocument();
try {
// Reading the xml
doc.Load("C:\\Temp\navetout.xml");
DataTable dt = new DataTable();
// Code here to read the xml into an already existing database table?
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
数据库位于另一台服务器上,我已将其包含在 app.config 中
<connectionStrings>
<add name="CS"
connectionString="Data Source=tsrv2062;Initial Catalog=BUMS;Integrated Security=True"/>
</connectionStrings>
假设 XML 文件具有标签“Name”,而数据库表列具有“Firstname”列。
XML 示例:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfFolkbokforingspostTYPE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FolkbokforingspostTYPE>
<Sekretessmarkering xsi:nil="true" />
<Personpost>
<PersonId>
<PersonNr>7527245452542</PersonNr>
</PersonId>
<HanvisningsPersonNr xsi:nil="true" />
<Namn>
<Tilltalsnamnsmarkering>20</Tilltalsnamnsmarkering>
<Fornamn>skjdgnsdng</Fornamn>
<Mellannamn xsi:nil="true" />
<Efternamn>sdsdgsdgs</Efternamn>
<Aviseringsnamn xsi:nil="true" />
</Namn>
<Folkbokforing>
<Folkbokforingsdatum>20060512</Folkbokforingsdatum>
<LanKod>56</LanKod>
<KommunKod>77</KommunKod>
<ForsamlingKod xsi:nil="true" />
<Fastighetsbeteckning>PÅLNGE 6:38</Fastighetsbeteckning>
<FiktivtNr>0</FiktivtNr>
</Folkbokforing>
<Adresser>
<Folkbokforingsadress>
<CareOf xsi:nil="true" />
<Utdelningsadress1 xsi:nil="true" />
<Utdelningsadress2>sgdsdgsdgs</Utdelningsadress2>
<PostNr>78965</PostNr>
<Postort>PÅLÄNG</Postort>
</Folkbokforingsadress>
<Riksnycklar>
<FastighetsId>46464545</FastighetsId>
<AdressplatsId>764846846</AdressplatsId>
<LagenhetsId>45465654645</LagenhetsId>
</Riksnycklar>
</Adresser>
<Fodelse>
<HemortSverige>
<FodelselanKod>00</FodelselanKod>
<Fodelseforsamling>NEDERKALIX</Fodelseforsamling>
</HemortSverige>
</Fodelse>
<Medborgarskap>
<MedborgarskapslandKod>SE</MedborgarskapslandKod>
<Medborgarskapsdatum>0</Medborgarskapsdatum>
</Medborgarskap>
</Personpost>
</FolkbokforingspostTYPE>
</ArrayOfFolkbokforingspostTYPE>
这些是数据库表的列:
PersonalIdentityNumber
ProtectedIdentity
ReferedCivicRegistrationNumber
UnregistrationReason
UnregistrationDate
MessageComputerComputer
GivenNameNumber
FirstName
MiddleName
LastName
NotifyName
NationalRegistrationDate
NationalRegistrationCountyCode
NationalRegistrationMunicipalityCode
NationalRegistrationCoAddress
NationalRegistrationDistributionAddress1
NationalRegistrationDistributionAddress2
NationalRegistrationPostCode
NationalRegistrationCity
NationalRegistrationNotifyDistributionAddress
NationalRegistrationNotifyPostCode
NationalRegistrationNotifyCity
ForeignDistrubtionAddress1
ForeignDistrubtionAddress2
ForeignDistrubtionAddress3
ForeignDistrubtionCountry
ForeignDate
BirthCountyCode
BirthParish
ForeignBirthCity
CitizenshipCode
CitizenshipDate
Email
Telephone
Mobiletelephone
Gender
NotNewsPaper
Note
StatusCode
NationalRegistrationCode
RegistrationDate
LastUpdatedFromNavet
TemporaryDistrubtionAddress1
TemporaryDistrubtionAddress2
TemporaryDistrubtionAddress3
TemporaryDistrubtionCountry
Password
VisibilityLevel
LastChangedBy
LastChangedDate
SeamanIdentity
Category
这里举个例子,<PersonNr>标签和数据库列PersonalIdentityNumber是一样的。
与 XML 标记不匹配的列应该返回 null。
在将 XML 数据读入数据库表之前,我想 XML-tags 必须被翻译成数据库表列。在这种情况下,“名字”。
谁能帮我解决这个“翻译”和读取数据库表的问题。
【问题讨论】:
-
“存储过程”I suggested you here 方法有什么问题?
-
我需要从文件中读取 XML。
-
正如我在那里告诉您的:您从 C# 应用程序中的文件中读取 XML 并将其传递给存储过程。 SP 将切碎 XML 并将所有数据插入到您指定的列中...
-
但是你没有提到从 XML 文件中读取是如何发生的,这就是我想知道的。
-
嗨,西蒙。您可能只做一个(C#)
var xd=new XmlDocument(),然后使用Load()方法。 You can read this。有几种方法可以做到这一点。
标签: sql-server xml tsql bulk-load