2016-04-05 3 views
0

XML verilerini bir veritabanı tablosuna eşleyen bir program yazıyorum.XML'i Veritabanı tablosuna eşleme

Bu Denedim nasıl:

namespace TESTMAPPNING2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Test(); 
     } 


     static void Test() 
     { 
      string connetionString = null; 
      SqlConnection connection; 
      SqlCommand command; 
      SqlDataAdapter adpter = new SqlDataAdapter(); 
      DataSet ds = new DataSet(); 
      XmlReader xmlFile; 
      string sql = null; 

      //The XML-tags that i want to insert in the table columns 
      string PersonalIdentityNumber = null; 
      string ProtectedIdentity = null; 
      int ReferedCivicRegistrationNumber = 0; 
      string UnregistrationReason = null; 
      DateTime? UnregistrationDate = null; 
      string MessageComputerComputer = null; 
      int GivenNameNumber = 0; 
      string FirstName = null; 
      string LastName = null; 
      string NotifyName = null; 
      DateTime? NationalRegistrationDate = null; 
      string NationalRegistrationCountyCode = null; 
      string NationalRegistrationMunicipalityCode = null; 
      string NationalRegistrationCoAddress = null; 
      string NationalRegistrationDistributionAddress1 = null; 
      string NationalRegistrationDistributionAddress2 = null; 
      string NationalRegistrationPostCode = null; 
      string NationalRegistrationCity = null; 
      string NationalRegistrationNotifyDistributionAddress = null; 
      string NationalRegistrationNotifyPostCode = null; 
      string NationalRegistrationNotifyCity = null; 
      string ForeignDistrubtionAddress1 = null; 
      string ForeignDistrubtionAddress2 = null; 
      string ForeignDistrubtionAddress3 = null; 
      string ForeignDistrubtionCountry = null; 
      string ForeignDate = null; 
      string BirthCountyCode = null; 
      string BirthParish = null; 
      string ForeignBirthCity = null; 
      string CitizenshipCode = null; 
      DateTime? CitizenshipDate = null; 
      string Email = null; 
      string Telephone = null; 
      string Mobiletelephone = null; 
      string Gender = null; 
      string NotNewsPaper = null; 
      string Note = null; 
      string StatusCode = null; 
      string NationalRegistrationCode = null; 
      DateTime? RegistrationDate = null; 
      DateTime? LastUpdatedFromNavet = null; 
      string TemporaryDistrubtionAddress1 = null; 
      string TemporaryDistrubtionAddress2 = null; 
      string TemporaryDistrubtionAddress3 = null; 
      string TemporaryDistrubtionCountry = null; 
      string Password = null; 
      string VisibilityLevel = null; 
      string LastChangedBy = null; 
      DateTime? LastChangedDate = null; 
      int SeamanIdentity = 0; 
      string Category = null; 







      connetionString = "Data Source=tsrv2062;Initial Catalog=Bums;User ID=BumsUser;Password=2tusen7Bums"; 

      connection = new SqlConnection(connetionString); 

      xmlFile = XmlReader.Create("navetout.xml", new XmlReaderSettings()); 
      ds.ReadXml(xmlFile); 

      int i = 0; 
      connection.Open(); 
      for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++) 
      { 
       PersonalIdentityNumber = ds.Tables[0].Rows[i].ItemArray[0].ToString(); 



       SqlCommand command1 = new SqlCommand("INSERT INTO Seamen(PersonalIdentityNumber, ProtectedIdentity, ReferedCivicRegistrationNumber,UnregistrationReason,UnregistrationDate,MessageComputerComputer,GivenNameNumber,FirstName,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) values(@PersonalIdentityNumber, @ProtectedIdentity, @ReferedCivicRegistrationNumber,@UnregistrationReason,@UnregistrationDate,@MessageComputerComputer,@GivenNameNumber,@FirstName,@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)", connection); 
       command1.Parameters.AddWithValue("@PersonalIdentityNumber", PersonalIdentityNumber); 
       command1.Parameters.AddWithValue("@ProtectedIdentity", ProtectedIdentity); 
       command1.Parameters.AddWithValue("@ReferedCivicRegistrationNumber", ReferedCivicRegistrationNumber); 
       command1.Parameters.AddWithValue("@UnregistrationReason", UnregistrationReason); 
       command1.Parameters.AddWithValue("@UnregistrationDate", UnregistrationDate); 
       command1.Parameters.AddWithValue("@MessageComputerComputer", MessageComputerComputer); 
       command1.Parameters.AddWithValue("@GivenNameNumber", GivenNameNumber); 
       command1.Parameters.AddWithValue("@FirstName", FirstName); 
       command1.Parameters.AddWithValue("@LastName", LastName); 
       command1.Parameters.AddWithValue("@NotifyName", NotifyName); 
       command1.Parameters.AddWithValue("@NationalRegistrationDate", NationalRegistrationDate); 
       command1.Parameters.AddWithValue("@NationalRegistrationCountyCode", NationalRegistrationCountyCode); 
       command1.Parameters.AddWithValue("@NationalRegistrationMunicipalityCode", NationalRegistrationMunicipalityCode); 
       command1.Parameters.AddWithValue("@NationalRegistrationCoAddress", NationalRegistrationCoAddress); 
       command1.Parameters.AddWithValue("@NationalRegistrationDistributionAddress1", NationalRegistrationDistributionAddress1); 
       command1.Parameters.AddWithValue("@NationalRegistrationDistributionAddress2", NationalRegistrationDistributionAddress2); 
       command1.Parameters.AddWithValue("@NationalRegistrationPostCode", NationalRegistrationPostCode); 
       command1.Parameters.AddWithValue("@NationalRegistrationCity", NationalRegistrationCity); 
       command1.Parameters.AddWithValue("@NationalRegistrationNotifyDistributionAddress", NationalRegistrationNotifyDistributionAddress); 
       command1.Parameters.AddWithValue("@NationalRegistrationNotifyPostCode", NationalRegistrationNotifyPostCode); 
       command1.Parameters.AddWithValue("@NationalRegistrationNotifyCity", NationalRegistrationNotifyCity); 
       command1.Parameters.AddWithValue("@ForeignDistrubtionAddress1", ForeignDistrubtionAddress1); 
       command1.Parameters.AddWithValue("@ForeignDistrubtionAddress2", ForeignDistrubtionAddress2); 
       command1.Parameters.AddWithValue("@ForeignDistrubtionAddress3", ForeignDistrubtionAddress3); 
       command1.Parameters.AddWithValue("@ForeignDistrubtionCountry", ForeignDistrubtionCountry); 
       command1.Parameters.AddWithValue("@ForeignDate", ForeignDate); 
       command1.Parameters.AddWithValue("@BirthCountyCode", BirthCountyCode); 
       command1.Parameters.AddWithValue("@BirthParish", BirthParish); 
       command1.Parameters.AddWithValue("@ForeignBirthCity", ForeignBirthCity); 
       command1.Parameters.AddWithValue("@CitizenshipCode", CitizenshipCode); 
       command1.Parameters.AddWithValue("@CitizenshipDate", CitizenshipDate); 
       command1.Parameters.AddWithValue("@Email", Email); 
       command1.Parameters.AddWithValue("@Telephone ", Telephone); 
       command1.Parameters.AddWithValue("@Mobiletelephone", Mobiletelephone); 
       command1.Parameters.AddWithValue("@Gender", Gender); 
       command1.Parameters.AddWithValue("@NotNewsPaper", NotNewsPaper); 
       command1.Parameters.AddWithValue("@Note", Note); 
       command1.Parameters.AddWithValue("@StatusCode", StatusCode); 
       command1.Parameters.AddWithValue("@NationalRegistrationCode", NationalRegistrationCode); 
       command1.Parameters.AddWithValue("@RegistrationDate", RegistrationDate); 
       command1.Parameters.AddWithValue("@LastUpdatedFromNavet", LastUpdatedFromNavet); 
       command1.Parameters.AddWithValue("@TemporaryDistrubtionAddress1", TemporaryDistrubtionAddress1); 
       command1.Parameters.AddWithValue("@TemporaryDistrubtionAddress2", TemporaryDistrubtionAddress2); 
       command1.Parameters.AddWithValue("@TemporaryDistrubtionAddress3", TemporaryDistrubtionAddress3); 
       command1.Parameters.AddWithValue("@TemporaryDistrubtionCountry", TemporaryDistrubtionCountry); 
       command1.Parameters.AddWithValue("@Password", Password); 
       command1.Parameters.AddWithValue("@VisibilityLevel", VisibilityLevel); 
       command1.Parameters.AddWithValue("@LastChangedBy", LastChangedBy); 
       command1.Parameters.AddWithValue("@LastChangedDate", LastChangedDate); 
       command1.Parameters.AddWithValue("@SeamanIdentity", SeamanIdentity); 
       command1.Parameters.AddWithValue("@Category", Category); 



       command1.ExecuteNonQuery(); 
      } 
      connection.Close(); 
      Console.WriteLine("Done"); 
     } 
    } 
} 

hata

adı "NationalRegistrationNotifyDistributionAddress" Bu bağlamda izin verilmez diyor command1.ExecuteNonQuery();

üzerinde hata alıyorum. Geçerli ifadeler sabitler, sabit ifadeler ve (bazı bağlamlarda) değişkenlerdir. Sütun isimlerine izin verilmiyor.

XML navetout.xml şuna benzer:

<?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>194903188953</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>195405869370</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> </ArrayOfFolkbokforingspostTYPE> 

neden hata alıyorum?

Ve en önemlisi, XML etiketlerini tablo sütunlarıyla eşleştirmek için nasıl "çevirebilirim?"

+0

Bu RDBMS şudur? Lütfen "mysql", "postgresql", "sql-server", "oracle" veya "db2" - veya tamamen başka bir şey kullanıp kullanmadığınızı belirtmek için bir etiket ekleyin. –

+0

SQL-server için –

cevap

0

Tüm alanları geçmiyorsunuz. Geri kalanlar için parametreleri eklemeniz gerekecek.

command1.Parameters.AddWithValue("@NationalRegistrationNotifyDistributionAddress", yourData); 
// same for the rest fields 

Ayrıca @ ilk parametre sonra sql eksik. Aşağıdaki linki

+0

İlk parametrede @ nin neyi kastettiğini kastediyorsunuz?Komut1.Parameters.AddWithValue ("@ PersonalIdentityNumber", PersonalIdentityNumber); ' –

+0

' '' ifadesine sahip olmak bir parametre ve daha sonra bir değer sağlamanız gerektiği anlamına gelir. Yalnızca sql'de ilk parametre için (PersonalIdentityNumber) '' ''a sahipsiniz. Gerisi için kayıp. Bu olmadan, parametre bir sütun adı olarak kabul edilir, bu yüzden "Sütun isimlerine izin verilmez" şeklinde bir hata oluştu. – Quentin

+0

Evet ama değer parametreden sonra yerel varable .. Lütfen güncellenmiş soruma bakın –

0

deneyin Eğer

values(@PersonalIdentityNumber, NationalRegistrationNotifyDistribution ... 

birinci, ikinci değil @ ile bulmak için uzun kod satırında, datatable için

www.dotnetpickles.com/2014/02/aspnet-convert-xml-to-datatable-in-cnet.html 
0

xml dönüştürmek.

Sütunlarınızın adını ve değişkenlerinizin adlarını nerede kullandığınızı bilmelisiniz.

Sen VALUES içinde değişmez değerleri kullanılır, ancak olabilir - sen hepsini beyan ve komuta nesnelere değerlerle eklemeniz gerekir @ ile (parametreleri kullanırsanız test amaçla sadece bu ekliyoruz:

.
command1.Parameters.AddWithValue("@PersonalIdentityNumber", ... 

ya sonra bu serisini, tüm XML içeriğiyle serileştirme sınıfları yazmayı deneyin test için değişmez değerleri kullanılır veya belki @

+0

Tamam, deneyeceğim. Teşekkürler –

+0

Değerleri veritabanına ekleyebilmem için XML etiketlerini bu yerel değişkenlere eklemek mümkün mü? –

+0

@ Simon.S, XML bir dizedir (teknik olarak, uzmanlık var ...). 'VARCHAR (MAX)' türünde bir SQL parametresi tanımlayabilir, dizgeyi geçirebilir ve SQL kodunuzda XML’e gönderebilirsiniz. Bunu yapmak için, XML için kodlamaya ihtiyaç duyan özel karakterlerle sorun yaşayabilirsiniz (ör. '& -> &') ... SQL parametresini XML olarak tanımlamak daha iyiydi, böylece kodlama geçiş sırasında yapılmalıdır. Her iki durumda da, XML'inizi SQL kodu içinde parçalamak zorunda kalacaksınız. [Bunu nasıl yapıyorsun? Sana zaten cevaplar verdim ...] (http://stackoverflow.com/a/36037496/5089204) :-) – Shnugo

0

ile doğru adlandırma tüm parametreleri ekleyin ve kullanımı (classe içine XML okuma s). En iyisi, XML'in sadece düz bir XML'den ziyade iç düğümleri olduğu iç sınıfları kullanmaktır.

Bunun bir deneme olduğunu düşünüyorum, bu yüzden sonraki eğitim noktası muhtemelen DB'deki tek "canavar" tablosunu mantıksal bağlantılı birimlere (aka Normalization) ayırmak olacaktır.