2010-12-09 41 views
1

J'utilise des procédures stockées pour obtenir des données de db (ms sql 2008 r2 express). Deux champs dans la table source peuvent contenir des valeurs NULL alors quand j'ajoute la source de données à mon projet dans VS dans le concepteur de base de données, je mets la propriété AllowDBNull des champs NULL à True et NullValue à (Empty).Mystérieuse violation de contrainte dans le code associé à C# db

En dépit de toutes ces actions, j'obtiens une exception chaque fois que l'adaptateur de données généré tente d'obtenir une ligne avec des valeurs nulles. J'ai tout vérifié: AllowDBNull est True, NullValue est (Empty), aucune clé unique n'est dans la table.

Qu'est-ce qui ne va pas avec mon code?

UPD "Message d'exception: impossible d'activer les contraintes: une ou plusieurs lignes contiennent des valeurs qui violent des contraintes non nulles, uniques ou de clé étrangère."

code:

foreach (BusStationDataSet.selectCarrierListRow row in _tblSource.Rows) 
        { 
//Next line of code throws exception 
         BusStationDataSet.selectCarrierPhonesDataTable _tblPhones = _taPhones.GetData(row.carrierId, Settings.Default.DataLanguage); 
         phones = string.Empty; 
         int i = 0; 

         foreach (BusStationDataSet.selectCarrierPhonesRow phoneRow in _tblPhones.Rows) 
         { 
          i++; 
          string end = i == _tblPhones.Rows.Count ? "" : ", "; 

          phones += (phoneRow.countryCode != string.Empty ? phoneRow.countryCode : "") + (phoneRow.regionCode != string.Empty ? " (" + phoneRow.regionCode + ") " : "") + phoneRow.number + 
           end; 
         } 
         phones = phones == string.Empty ? MultilangInterface.Instance.GetMessageString(MultilangInterface.Messages.NullValue) : phones; 

         _dsDestination.Tables["Carrier"].Rows.Add(new object[]{ 
          null, 
          row.carrierId, 
          row.title, 
          row.carrierType, 
          row.country, 
          row.city, 
          row.country + ", " + row.region + ", " + row.city + ", " + row.street + ", " + row.building + (string.IsNullOrEmpty(row.addressLine)?"":", " + row.addressLine), 
          row.lastName +" "+ row.firstName +" "+ row.middleName, 
          phones 
         }); 
        } 
+0

Comment sommes-nous supposés savoir, si vous ne postez pas votre code? – Oded

+4

'Ce qui ne va pas avec mon code' est la mauvaise question. ** Où diable est votre code? ** est plus comme ça. La même chose vaut pour les détails de l'exception. – jgauffin

+1

Je ne sais pas ce qui ne va pas avec votre code, vous ne l'avez pas fourni. –

Répondre

0

Enfin, j'ai trouvé la question. Il y avait deux tables générées dans l'ensemble de données du projet avec des noms presque similaires: selectCarriersPhonesDataTable et selectCarrierPhonesDataTable. Le second était la source d'exception car pour les deux champs Nullable, la propriété NullValue a été définie sur (Throw Exception). Après que je me suis débarrassé de cette diambiguation, tout s'est avéré fonctionner sans faille. Certainement je devrais dormir suffisamment :)