ADO.NET 2.0, SqlCommandBuilder og Default Values
Hej,Jeg har opdateret en *stor* mængde af min kode fra et velfungerende .NET 1.1 miljø med en meget gammel Data Access Block, til et NET 2.0 miljø, med dertilhørende opdateret Enterprise Library og dens nye DAB.
Dette har medført en subtil ændring, i forbindelse med det kode der håndterer at opdatere et in-memory DataTable op imod SQL-serveren. Tilsyneladende kan min SqlCommandBuilders InsertCommand ikke længere håndtere at undlade at give NULL-værdier med i de tilfælde hvor der er default-værdier for en kolonne.
I det tidligere setup virkede koden perfekt, så jeg antager Command-builderen simpelthen ikke lavede parametre for NULL-valued fields i hvert row. Det gør den tydeligvis nu, og det resulterer selvfølgelig i en masse fejl ala den følgende:
"Cannot insert the value NULL into column 'Created', table 'MyTable'; column does not allow nulls. INSERT fails.
The statement has been terminated. "
I de tilfælde hvor min kolonne har en non-null klausul i kombination med en default-værdi specificeret.
Jeg har ikke været i stand til at finde noget som helst om dette på nettet, så er der nogen der har et clue?
Det virker jo umiddelbart som et breaking-change, men det er meget subtilt.
Er der en property jeg overser, hvis default-værdi har ændret sig eller noget? Al hjælp ses gerne. Jeg har desværre ikke mulighed for at videregive koden (det ville også hurtigt blive uoverskueligt), men processen er som følger:
Skaf Database object
Lav SqlConnection object
Lav DataAdapter
Lav simpel "SELECT * FROM MyTable" SelectCommand til DataAdapter
Lav SqlCommandBuilder på DataAdapter
kør UpdateDataset på databasen, med SqlCommandBuilderens Insert, Update og DeleteCommands. (UpdateBehavior.Transactional, men Standard giver tilsyneladende samme resultat).
DataTable.AcceptChanges
.. Cleanup.
Med venlig hilsen,
Ulrik Jensen