相同变量上的两个值

时间:2016-04-18 22:26:22

标签: c# sql-server

我尝试使用C#更新表格,我能够做到这一点。 我正在对XML文件进行deserlizing,然后使用XML中的这些值更新表。这很有效。

但是,有时主键会被另一个值替换。

例如:

我想更新Name, LastName, Middlename where PersonIdentity = @PersonIdentity

command1.Parameters.AddWithValue("@PersonIdentity", p.PersonIdentity );

有时在XML中,PersonIdentity会被PersonidentityNumber取代。它应该在数据库中表现相同(PersonIdentityPersonIdentityNumber是一回事,但在XML中,它有时会写得不一样。

现在我的问题是:

如何才能读取两个XML标签(我可以这样做)并将其引用到数据库中的相同主键?

我希望PersonIdentityPersonIdentityNumber都代表数据库中的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; }
}
}

1 个答案:

答案 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字段调整获取数据的方式。