我尝试使用C#更新表格,我能够做到这一点。 我正在对XML文件进行deserlizing,然后使用XML中的这些值更新表。这很有效。
但是,有时主键会被另一个值替换。
例如:
我想更新Name, LastName, Middlename where PersonIdentity = @PersonIdentity
command1.Parameters.AddWithValue("@PersonIdentity", p.PersonIdentity );
有时在XML中,PersonIdentity
会被PersonidentityNumber
取代。它应该在数据库中表现相同(PersonIdentity
和PersonIdentityNumber
是一回事,但在XML中,它有时会写得不一样。
现在我的问题是:
如何才能读取两个XML标签(我可以这样做)并将其引用到数据库中的相同主键?
我希望PersonIdentity
和PersonIdentityNumber
都代表数据库中的PersonIdentity
。在XML中,名称只是不同,即使它们具有相同的类型和相同的数字。
更新:
这是我的XML
<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>0000000000</PersonNr>
</PersonId>
<HanvisningsPersonNr xsi:nil="true" />
<Namn>
<Tilltalsnamnsmarkering>20</Tilltalsnamnsmarkering>
<Fornamn>Erik Lennart</Fornamn>
<Mellannamn xsi:nil="true" />
<Efternamn>Enberg</Efternamn>
<Aviseringsnamn xsi:nil="true" />
</Namn>
<Folkbokforing>
<Folkbokforingsdatum>20060512</Folkbokforingsdatum>
<LanKod>25</LanKod>
<KommunKod>14</KommunKod>
<ForsamlingKod xsi:nil="true" />
<Fastighetsbeteckning>PÅLÄNGE 6:38</Fastighetsbeteckning>
<FiktivtNr>0</FiktivtNr>
</Folkbokforing>
<Adresser>
<Folkbokforingsadress>
<CareOf xsi:nil="true" />
<Utdelningsadress1 xsi:nil="true" />
<Utdelningsadress2>STORVÄGEN 65</Utdelningsadress2>
<PostNr>95204</PostNr>
<Postort>PÅLÄNG</Postort>
</Folkbokforingsadress>
<Riksnycklar>
<FastighetsId>250015520</FastighetsId>
<AdressplatsId>2416233</AdressplatsId>
<LagenhetsId>22143838</LagenhetsId>
</Riksnycklar>
</Adresser>
<Fodelse>
<HemortSverige>
<FodelselanKod>25</FodelselanKod>
<Fodelseforsamling>NEDERKALIX</Fodelseforsamling>
</HemortSverige>
</Fodelse>
<Medborgarskap>
<MedborgarskapslandKod>SE</MedborgarskapslandKod>
<Medborgarskapsdatum>0</Medborgarskapsdatum>
</Medborgarskap>
</Personpost>
</FolkbokforingspostTYPE>
<FolkbokforingspostTYPE>
<Sekretessmarkering xsi:nil="true" />
<Personpost>
<PersonId>
<TilldelatPersonNrSamordningsNr>454363463466</TilldelatPersonNrSamordningsNr>
</PersonId>
<HanvisningsPersonNr xsi:nil="true" />
<Namn>
<Fornamn styrkt="J">Eduardo Metran</Fornamn>
<Mellannamn xsi:nil="true" />
<Efternamn styrkt="J">Garcia</Efternamn>
<Aviseringsnamn xsi:nil="true" />
</Namn>
<Folkbokforing>
<Folkbokforingsdatum xsi:nil="true" />
<LanKod>14</LanKod>
<KommunKod xsi:nil="true" />
<ForsamlingKod xsi:nil="true" />
<Fastighetsbeteckning xsi:nil="true" />
</Folkbokforing>
<Adresser />
<Fodelse>
<OrtUtlandet>
<FodelseortUtland styrkt="J">Sta Cruz Zambales</FodelseortUtland>
<Fodelseland>FILIPPINERNA</Fodelseland>
</OrtUtlandet>
</Fodelse>
<Medborgarskap>
<MedborgarskapslandKod styrkt="J">PH</MedborgarskapslandKod>
<Medborgarskapsdatum>0</Medborgarskapsdatum>
</Medborgarskap>
</Personpost>
</FolkbokforingspostTYPE>
<FolkbokforingspostTYPE>
<Sekretessmarkering xsi:nil="true" />
<Personpost>
<PersonId>
<PersonNr>62364363455</PersonNr>
</PersonId>
<HanvisningsPersonNr xsi:nil="true" />
<Namn>
<Fornamn>Sarah Dina Tomasdotter</Fornamn>
<Mellannamn xsi:nil="true" />
<Efternamn>Själander</Efternamn>
<Aviseringsnamn xsi:nil="true" />
</Namn>
<Folkbokforing>
<Folkbokforingsdatum>20120123</Folkbokforingsdatum>
<LanKod>01</LanKod>
<KommunKod>80</KommunKod>
<ForsamlingKod xsi:nil="true" />
<Fastighetsbeteckning>SLALOMSVÄNGEN 3</Fastighetsbeteckning>
<FiktivtNr>0</FiktivtNr>
</Folkbokforing>
<Adresser>
<Folkbokforingsadress>
<CareOf xsi:nil="true" />
<Utdelningsadress1 xsi:nil="true" />
<Utdelningsadress2>STÖRTLOPPSVÄGEN 18 LGH 1102</Utdelningsadress2>
<PostNr>12947</PostNr>
<Postort>HÄGERSTEN</Postort>
</Folkbokforingsadress>
<Riksnycklar>
<FastighetsId>010114422</FastighetsId>
<AdressplatsId>1463872</AdressplatsId>
<LagenhetsId>24865059</LagenhetsId>
</Riksnycklar>
</Adresser>
<Fodelse>
<HemortSverige>
<FodelselanKod>01</FodelselanKod>
<Fodelseforsamling>SPÅNGA</Fodelseforsamling>
</HemortSverige>
</Fodelse>
<Medborgarskap>
<MedborgarskapslandKod>SE</MedborgarskapslandKod>
<Medborgarskapsdatum>0</Medborgarskapsdatum>
</Medborgarskap>
</Personpost>
</FolkbokforingspostTYPE>
正如您在PersonId
- 代码中看到的那样,它有时会PersonNr
,并且在极少数情况下会有TilldelatPersonNrSamordningsNr
。我希望它们都代表personidentity
p
是一个类:
class Person {
public string PersonalIdentityNumber { get; set; }
public string SpecialIdentityNumber { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string NationalRegistrationCountyCode { get; set; }
public string NationalRegistrationMunicipalityCode { get; set; }
public string NationalRegistrationDistributionAddress2 { get; set; }
public string NationalRegistrationPostCode { get; set; }
public string CitizenshipCode { get; set; }
}
更新2
我的整个代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Xml;
using System.Data;
using System.Xml.Serialization;
using System.IO;
namespace TESTMAPPNING2
{
class Program
{
static void Main(string[] args)
{
try
{
List<FolkbokforingspostTYPE> deserializedList = new List<FolkbokforingspostTYPE>();
deserializedList = Deserialize<List<FolkbokforingspostTYPE>>();
var myPersons = Deserialize<List<FolkbokforingspostTYPE>>()
.Select(x => new Person
{
PersonalIdentityNumber = x.Personpost.PersonId.PersonNr,
SpecialIdentityNumber = x.Personpost.PersonId.Tilltalsnamnsmarkering != null ? x.Personpost.PersonId.Tilltalsnamnsmarkering : null,
LastName = x.Personpost.Namn.Efternamn,
FirstName = x.Personpost.Namn.Fornamn,
NationalRegistrationCountyCode = x.Personpost.Folkbokforing.LanKod,
NationalRegistrationMunicipalityCode = x.Personpost.Folkbokforing.KommunKod,
NationalRegistrationDistributionAddress2 = x.Personpost.Adresser.Folkbokforingsadress != null ? x.Personpost.Adresser.Folkbokforingsadress.Utdelningsadress2 : null,
NationalRegistrationPostCode = x.Personpost.Adresser.Folkbokforingsadress != null ? x.Personpost.Adresser.Folkbokforingsadress.PostNr : null,
CitizenshipCode = x.Personpost.Medborgarskap.MedborgarskapslandKod,
// and so on
});
// var FirstName = deserializedList.Select(item => item.Personpost.Namn.Fornamn).ToList();
// var LastName = deserializedList.Select(item => item.Personpost.Namn.Efternamn).ToList();
// var LanKod = deserializedList.Select(item => item.Personpost.Folkbokforing.LanKod).ToList();
// var Kommunkod = deserializedList.Select(item => item.Personpost.Folkbokforing.KommunKod).ToList();
//// var UtdelAdress2 = deserializedList.Select(item => item.Personpost.Adresser.Folkbokforingsadress.Utdelningsadress2).ToList();
// var PostNr = deserializedList.Select(item => item.Personpost.Adresser.Folkbokforingsadress != null ? item.Personpost.Adresser.Folkbokforingsadress.PostNr : null);
// //var PostOrt = deserializedList.Select(item => item.Personpost.Adresser.Folkbokforingsadress.Postort).ToList();
// //var FodelselanKod = deserializedList.Select(item => item.Personpost.Fodelse.HemortSverige.FodelselanKod).ToList();
// //var Fodelseforsamling = deserializedList.Select(item => item.Personpost.Fodelse.HemortSverige.Fodelseforsamling).ToList();
// var MedborgarskapslandKod = deserializedList.Select(item => item.Personpost.Medborgarskap.MedborgarskapslandKod).ToList();
// var Medborgarskapsdatum = deserializedList.Select(item => item.Personpost.Medborgarskap.Medborgarskapsdatum).ToList();
//var zipped = PersonalIdentityNumber.Zip(FirstName, Tuple.Create);
// foreach (var tuple in zipped)
// {
// //Console.WriteLine(tuple.Item1);
// //Console.WriteLine(tuple.Item2);
// }
//Console.WriteLine(PersonalIdentityNumber.Count());
//for (int i = 0; i < PersonalIdentityNumber.Count; i++)
//{
// var personnummer = PersonalIdentityNumber[i];
// var fornamn = FirstName[i];
// var efternamn = LastName[i];
// var lankod = LanKod[i];
// var kommunkod = Kommunkod[i];
// var utdelAdress2 = UtdelAdress2[i];
// var postNr = PostNr[i];
// var postOrt = PostOrt[i];
// var fodelselanKod = FodelselanKod[i];
// var fodelseforsamling = Fodelseforsamling[i];
// var medborgarskapslandKod = MedborgarskapslandKod[i];
// var medborgarskapsdatum = Medborgarskapsdatum[i];
// use your variables
//}
//Console.WriteLine(PersonalIdentityNumber.Count());
//foreach (var i in PersonalIdentityNumber)
//{
// Console.WriteLine("Personnummer: " + i);
// foreach(var a in FirstName)
// {
// Console.WriteLine("Namn: " + a);
// }
string connetionString = null;
SqlDataAdapter adpter = new SqlDataAdapter();
DataSet ds = new DataSet();
XmlReader xmlFile;
connetionString = "Data Source=tsrv2062;Initial Catalog=Bums;User ID=BumsUser;Password=2tusen7Bums";
xmlFile = XmlReader.Create("navetout.xml", new XmlReaderSettings());
ds.ReadXml(xmlFile);
using (var connection = new SqlConnection(connetionString))
{
connection.Open();
DateTime datum = DateTime.Now;
SqlCommand command1 = new SqlCommand("UPDATE Seamen SET FirstName = @FirstName, LastName = @LastName, NationalRegistrationCountyCode = @NationalRegistrationCountyCode, NationalRegistrationMunicipalityCode = @NationalRegistrationMunicipalityCode,NationalRegistrationPostCode = @NationalRegistrationPostCode, CitizenshipCode = @CitizenshipCode, LastChangedDate = @LastChangedDate WHERE PersonalIdentityNumber = @PersonalIdentityNumber", connection);
foreach (Person p in myPersons)
{
command1.Parameters.Clear();
command1.Parameters.AddWithValue("@PersonalIdentityNumber", p.PersonalIdentityNumber);
command1.Parameters.AddWithValue("@PersonalIdentityNumber", p.SpecialIdentityNumber ?? DBNull.Value.ToString());
command1.Parameters.AddWithValue("@FirstName", p.FirstName);
command1.Parameters.AddWithValue("@LastName", p.LastName);
command1.Parameters.AddWithValue("@NationalRegistrationCountyCode", p.NationalRegistrationCountyCode);
command1.Parameters.AddWithValue("@NationalRegistrationMunicipalityCode", p.NationalRegistrationMunicipalityCode);
command1.Parameters.AddWithValue("@NationalRegistrationDistributionAddress2", p.NationalRegistrationDistributionAddress2 ?? DBNull.Value.ToString());
command1.Parameters.AddWithValue("@NationalRegistrationPostCode", p.NationalRegistrationPostCode ?? DBNull.Value.ToString());
////command1.Parameters.AddWithValue("@NationalRegistrationCity", postOrt);
////command1.Parameters.AddWithValue("@BirthCountyCode", fodelselanKod);
////command1.Parameters.AddWithValue("@BirthParish", fodelseforsamling);
command1.Parameters.AddWithValue("@CitizenshipCode", p.CitizenshipCode);
//// command1.Parameters.AddWithValue("@CitizenshipDate", medborgarskapsdatum);
command1.Parameters.AddWithValue("@LastChangedDate", datum);
command1.ExecuteNonQuery();
Console.WriteLine(p.PersonalIdentityNumber);
}
}
Console.WriteLine("Done");
}// Put a break-point here, then mouse-over PersonalIdentityNumber... deserializedList contains everything if you need it
catch (Exception)
{
throw;
}
Console.ReadKey();
}
class Person {
public string PersonalIdentityNumber { get; set; }
public string SpecialIdentityNumber { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string NationalRegistrationCountyCode { get; set; }
public string NationalRegistrationMunicipalityCode { get; set; }
public string NationalRegistrationDistributionAddress2 { get; set; }
public string NationalRegistrationPostCode { get; set; }
public string CitizenshipCode { get; set; }
}
private static T Deserialize<T>() where T : new()
{
// Create an instance of T
T ReturnListOfT = CreateInstance<T>();
// Create a new file stream for reading the XML file
using (FileStream ReadFileStream = new FileStream("navetout.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
{
// Construct a XmlSerializer and use it
// to serialize the data from the stream.
XmlSerializer SerializerObj = new XmlSerializer(typeof(T));
try
{
// Deserialize the hashtable from the file
ReturnListOfT = (T)SerializerObj.Deserialize(ReadFileStream);
}
catch (Exception ex)
{
Console.WriteLine(string.Format("Failed to serialize. Reason: {0}", ex.Message));
}
}
// return the Deserialized data.
return ReturnListOfT;
}
// function to create instance of T
public static T CreateInstance<T>() where T : new()
{
return (T)Activator.CreateInstance(typeof(T));
}
}
[XmlRoot(ElementName = "Sekretessmarkering")]
public class Sekretessmarkering
{
[XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Nil { get; set; }
}
[XmlRoot(ElementName = "PersonId")]
public class PersonId
{
[XmlElement(ElementName = "PersonNr")]
public string PersonNr { get; set; }
[XmlElement(ElementName = "TilldelatPersonNrSamordningsNr")]
public string Tilltalsnamnsmarkering { get; set; }
}
[XmlRoot(ElementName = "HanvisningsPersonNr")]
public class HanvisningsPersonNr
{
[XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Nil { get; set; }
}
[XmlRoot(ElementName = "Mellannamn")]
public class Mellannamn
{
[XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Nil { get; set; }
}
[XmlRoot(ElementName = "Aviseringsnamn")]
public class Aviseringsnamn
{
[XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Nil { get; set; }
}
[XmlRoot(ElementName = "Namn")]
public class Namn
{
[XmlElement(ElementName = "Tilltalsnamnsmarkering")]
public string Tilltalsnamnsmarkering { get; set; }
[XmlElement(ElementName = "Fornamn")]
public string Fornamn { get; set; }
[XmlElement(ElementName = "Mellannamn")]
public Mellannamn Mellannamn { get; set; }
[XmlElement(ElementName = "Efternamn")]
public string Efternamn { get; set; }
[XmlElement(ElementName = "Aviseringsnamn")]
public Aviseringsnamn Aviseringsnamn { get; set; }
}
[XmlRoot(ElementName = "ForsamlingKod")]
public class ForsamlingKod
{
[XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Nil { get; set; }
}
[XmlRoot(ElementName = "Folkbokforing")]
public class Folkbokforing
{
[XmlElement(ElementName = "Folkbokforingsdatum")]
public string Folkbokforingsdatum { get; set; }
[XmlElement(ElementName = "LanKod")]
public string LanKod { get; set; }
[XmlElement(ElementName = "KommunKod")]
public string KommunKod { get; set; }
[XmlElement(ElementName = "ForsamlingKod")]
public ForsamlingKod ForsamlingKod { get; set; }
[XmlElement(ElementName = "Fastighetsbeteckning")]
public string Fastighetsbeteckning { get; set; }
[XmlElement(ElementName = "FiktivtNr")]
public string FiktivtNr { get; set; }
}
[XmlRoot(ElementName = "CareOf")]
public class CareOf
{
[XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Nil { get; set; }
}
[XmlRoot(ElementName = "Utdelningsadress1")]
public class Utdelningsadress1
{
[XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Nil { get; set; }
}
[XmlRoot(ElementName = "Folkbokforingsadress")]
public class Folkbokforingsadress
{
[XmlElement(ElementName = "CareOf")]
public CareOf CareOf { get; set; }
[XmlElement(ElementName = "Utdelningsadress1")]
public Utdelningsadress1 Utdelningsadress1 { get; set; }
[XmlElement(ElementName = "Utdelningsadress2")]
public string Utdelningsadress2 { get; set; }
[XmlElement(ElementName = "PostNr")]
public string PostNr { get; set; }
[XmlElement(ElementName = "Postort")]
public string Postort { get; set; }
}
[XmlRoot(ElementName = "Riksnycklar")]
public class Riksnycklar
{
[XmlElement(ElementName = "FastighetsId")]
public string FastighetsId { get; set; }
[XmlElement(ElementName = "AdressplatsId")]
public string AdressplatsId { get; set; }
[XmlElement(ElementName = "LagenhetsId")]
public string LagenhetsId { get; set; }
}
[XmlRoot(ElementName = "Adresser")]
public class Adresser
{
[XmlElement(ElementName = "Folkbokforingsadress")]
public Folkbokforingsadress Folkbokforingsadress { get; set; }
[XmlElement(ElementName = "Riksnycklar")]
public Riksnycklar Riksnycklar { get; set; }
}
[XmlRoot(ElementName = "HemortSverige")]
public class HemortSverige
{
[XmlElement(ElementName = "FodelselanKod")]
public string FodelselanKod { get; set; }
[XmlElement(ElementName = "Fodelseforsamling")]
public string Fodelseforsamling { get; set; }
}
[XmlRoot(ElementName = "Fodelse")]
public class Fodelse
{
[XmlElement(ElementName = "HemortSverige")]
public HemortSverige HemortSverige { get; set; }
}
[XmlRoot(ElementName = "Medborgarskap")]
public class Medborgarskap
{
[XmlElement(ElementName = "MedborgarskapslandKod")]
public string MedborgarskapslandKod { get; set; }
[XmlElement(ElementName = "Medborgarskapsdatum")]
public string Medborgarskapsdatum { get; set; }
}
[XmlRoot(ElementName = "Personpost")]
public class Personpost
{
[XmlElement(ElementName = "PersonId")]
public PersonId PersonId { get; set; }
[XmlElement(ElementName = "HanvisningsPersonNr")]
public HanvisningsPersonNr HanvisningsPersonNr { get; set; }
[XmlElement(ElementName = "Namn")]
public Namn Namn { get; set; }
[XmlElement(ElementName = "Folkbokforing")]
public Folkbokforing Folkbokforing { get; set; }
[XmlElement(ElementName = "Adresser")]
public Adresser Adresser { get; set; }
[XmlElement(ElementName = "Fodelse")]
public Fodelse Fodelse { get; set; }
[XmlElement(ElementName = "Medborgarskap")]
public Medborgarskap Medborgarskap { get; set; }
}
[XmlRoot(ElementName = "FolkbokforingspostTYPE")]
public class FolkbokforingspostTYPE
{
[XmlElement(ElementName = "Sekretessmarkering")]
public Sekretessmarkering Sekretessmarkering { get; set; }
[XmlElement(ElementName = "Personpost")]
public Personpost Personpost { get; set; }
}
}
答案 0 :(得分:2)
这里有一个建议,为什么在为表分配主键时不连接PersonalIdentityNumber和SpecialIdentityNumber?
potValue, playerBalance = checkBlackjack(playerValue, potValue, playerBalance, wager)
TypeError: 'NoneType' object is not iterable
更新数据库时......
public class Person
{
public string PersonalIdentityNumber { get; set; }
public string SpecialIdentityNumber { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string NationalRegistrationCountyCode { get; set; }
public string NationalRegistrationMunicipalityCode { get; set; }
public string NationalRegistrationDistributionAddress2 { get; set; }
public string NationalRegistrationPostCode { get; set; }
public string CitizenshipCode { get; set; }
}
PersonalIdentityNumber字段将等于Person.p.SpecialIdentityNumber + Person.p.SpecialIdentityNumber。如果其中任何一个丢失,它仍然可以,即使两者都存在。您只需使用PersonalIdentityNumber字段调整获取数据的方式。