2009-02-16 7 views
1

J'ai des problèmes en ce moment, je ne peux pas mettre à jour une table X dans DBDataContext, donc c'est mon extrait, à propos quand je mets à jour une seule table ça marche! Mais quand j'insérer, puis mettre à jour, il émet une exception: « ne peut pas lancer l'objet de System.Int32 type System.String »Impossible de mettre à jour Tabled Mapped dans Linq2Sql

{ 
      using (DBDataContext db = new DBDataContext()) 
      { 
       int codigo = Convert.ToInt32(lblNroInforme.Content); 
       int sucessfull = 0; 


       INFORMEMEDICO varInf = (from i in db.INFORMEMEDICOs 
             where i.numeroinforme == codigo 
             select i).SingleOrDefault(); 


       if (varInf == null) 
       { 
        varInf = new INFORMEMEDICO(); 
        varInf.codigoclase = Convert.ToInt32(lblCodigoClase.Content.ToString()); 
        varInf.codigoestudio = lblCodigoEstudio.Content.ToString(); 
        varInf.codigopaciente = Convert.ToInt32(lblCodigoPaciente.Content.ToString()); 
        varInf.conclusion = GetText(rtbConclusion); 
        varInf.fechainforme = DateTime.Today; 
        varInf.firmauno = getJPGFromImageControl(firmaUno.Source as BitmapImage); 
        varInf.firmados = getJPGFromImageControl(firmaDos.Source as BitmapImage); 
        varInf.hallazgo = GetText(rtbHallazgo); 
        varInf.horainforme = Convert.ToDateTime(DateTime.Today.ToShortTimeString()); 
        varInf.impreso = 0; 
        varInf.medicoinforma = cboTurnoMed.SelectedValue.ToString(); 
        varInf.nombreinforme = txtNombreExamen.Text; 
        varInf.numeroinforme = Convert.ToInt32(lblNroInforme.Content.ToString()); 
        varInf.tecnica = GetText(rtbTecnica); 
        varInf.turnosocio = lblTurnoMedico.Content.ToString(); 

        try 
        { 
         db.INFORMEMEDICOs.InsertOnSubmit(varInf); 
         db.SubmitChanges(); 
         sucessfull = 1; 
        } 
        catch (Exception ex) 
        { 
         MessageBox.Show("Error : " + ex.Message); 
        } 
        if (sucessfull==1) 
        { 
         EXAMENXATENCION varExA = (from ea in db.EXAMENXATENCIONs 
                where ea.codigo == codigo 
                select ea).SingleOrDefault(); 
         varExA.estadoestudio = 'I'; 
         db.SubmitChanges(); 
        } 

       } 

      } 

     } 

Je reçois cette pile de débogueur lorsque je joue à jour:

Ouvrez votre fichier DMBL en tant que fichier XML.
en System.Data.Linq.IdentityManager.StandardIdentityManager.MultiKeyManager`3.TryCreateKeyFromValues(Object[] values, MultiKey`2& k) 
    en System.Data.Linq.IdentityManager.StandardIdentityManager.MultiKeyManager`3.TryCreateKeyFromValues(Object[] values, MultiKey`2& k) 
    en System.Data.Linq.IdentityManager.StandardIdentityManager.MultiKeyManager`3.TryCreateKeyFromValues(Object[] values, MultiKey`2& k) 
    en System.Data.Linq.IdentityManager.StandardIdentityManager.MultiKeyManager`3.TryCreateKeyFromValues(Object[] values, MultiKey`2& k) 
    en System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache`2.Find(Object[] keyValues) 
    en System.Data.Linq.IdentityManager.StandardIdentityManager.Find(MetaType type, Object[] keyValues) 
    en System.Data.Linq.CommonDataServices.GetCachedObject(MetaType type, Object[] keyValues) 
    en System.Data.Linq.ChangeProcessor.GetOtherItem(MetaAssociation assoc, Object instance) 
    en System.Data.Linq.ChangeProcessor.BuildEdgeMaps() 
    en System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) 
    en System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) 
    en System.Data.Linq.DataContext.SubmitChanges() 
    en Demo.View.InformeMedico.btnGuardar_Click(Object sender, RoutedEventArgs e) en D:\cs_InformeMedico\app\InformeMedico.xaml.cs:línea 430 

Répondre

1

Après beaucoup de recherches, j'ai découvert que ce bug existe uniquement sur-WinXP Machines avec .NET 3.5 SP1. Sur Windows 7, cela fonctionne très bien. Malheureusement, il existe deux versions différentes du même cadre.

Il existe un correctif de microsoft qui résout mon problème sur les machines xp. http://support.microsoft.com/hotfix/KBHotfix.aspx?kbln=ja&kbnum=963657

Cordialement, Florian

+0

Cest vrai, par la façon dont je ne peux pas le figure sur Windows Vista machine il y a 1 an, je vais essayer ces jours-ci sur Windows 7, Restez en contact :) –

0

Vérifiez vos types pour chaque colonne, et voyez si quelque chose qui devrait être un int est vraiment une chaîne.

+0

vérifié déjà :( –

Questions connexes