SqlCommandBuilder e i blog
Ok, titolo strano, lo so.
Il principio è questo: grazie ad un blog e ad un post su come copiare dati con ADO.NET e SqlDataAdapter ho letteralmente scoperto la classe SqlCommandBuilder e lo splendido metodo GetInsertCommand().
Direte: e allora? Gran scoperta, complimentoni…
A parte l’ironia la cosa cade a “fagiulo”, anche se leggermente in ritardo, visto che proprio ieri ho perso un sacco di tempo nella scrittura di due insert usando i SqlCeDataAdapter. Ho perso un sacco perchè mi sono messo lì a scrivere una cinquatina se non più di sqlAdp.InsertCommand.Parameters.Add(…); mentre con SqlCommandBuilder.GetInsertCommand() avrei avuto tutto a gratis.
Per capire meglio la questione spiego cosa stavo realizzando.
In poche parole devo leggere delle tabelle da SQL Server 2005 Standard e copiarle su SQL Server 2005 Compact. Lo devo fare via codice e non via ETL, e tantomeno via RDA o Merge Replication. Per renderla veloce ecco allora che ho recuperato una DataTable dalla tabella di destinazione e da quella di sorgente. Poi ho copiato le DataRow dalla DataTable sorgente a quella di destinazione. Infine ho ridato la DataTable in pasto al SqlCeDataAdapter per fare l’update. Dovevo però definire l’InsertCommand del Data Adapter e così ho scritto una caterva, come già detto, di sqlAdp.InsertCommand.Parameters.Add(…);
Ora con quello letto nel post ho modificato il metodo passandogli sia la SqlConnection sorgente sia la SqlCeConnection di destinazione e usando la GetInsertCommand ho portato il tutto a poche linee di codice. Da oltre 200 linee di codice ad appena 40 linee.
P.S. Queste cose sono figlie anche del solito copia-incolla, dove recuperi qualcosa che avevi fatto in situazioni diverse e lo riadatti alla svelta senza pensare se risulta possibile farlo in maniera più furba. Vedi ad esempio copia delle DataRow tra due DataTable invece che “condivisione” dello stesso DataSet.
SqlDataAdapter, ADO.NET, SQL Server 2005 Compact, SqlCommandBuilder










