V08 - CommandBuilder

mercoledì 16 dicembre 2009 - 15.44

brazero Profilo | Junior Member

Ciao a tutti!

Come potrei fare per usare il commandbuilder su una tabella senza chiave primaria (ma con record univoci)?
oppure qualcuno mi può consigliare un'altro metodo senza scrivere la query string?

spiego, dovrei prendere i dati da una tabella X del database, lo salvo dentro un datatable.. gestisco alcuni valori e volevo aggiornare un'altra tabella Y col datatable (la tabella Y ha lo stesso schema della X).. il problema è che all'inizio non conosco il nome della tabella X qndi nn conosco i parametri.. (in realtà volevo trovare un metodo alternativo per fare la query string concatenata dentro mille cicli)

Grazie

Teech Profilo | Expert

Con i CommandBuilder DEVE essere presente una chiave primaria o univoca.
http://msdn.microsoft.com/it-it/library/tf579hcz(VS.80).aspx

Estratto dal link:
<SelectCommand deve anche restituire almeno una chiave primaria o una colonna univoca. In caso contrario, viene generata un'eccezione InvalidOperation e i comandi non vengono creati.>

La soluzione è di scrivere a mano i command (come suggerito nel link).
<Per ottenere prestazioni ottimali, specificare i comandi in modo esplicito anziché utilizzare DbCommandBuilder.>

Se riesci ad essere più esplicito su quello che devi fare possiamo provare a cercare una via alternativa...
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

brazero Profilo | Junior Member

Grazie..

allora ho un database con sostanzialmente due tipologie di tabelle: la prima sono delle tabelle che contengono "bozze di dati".. e una seconda che contengono i risultati finali..

io prendo i dati da una di queste tabelle che contengono le bozze, salvo dentro un datatable, elaboro i dati e li dovrei salvare poi dentro la rispettiva tabella finale..

la mia difficoltà è dovuta al fatto che non so a priori su quale tabelle verrano fatte le operazioni.. qndi non conosco i parametri..

quindi la mia domanda è: qual'è il migliore metodo per salvare i dati che sono dentro il datatable nel database? è possibile farlo senza usare il metodo spartano di fare i cicli e concatenare le stringhe? magari impostando il dataadapter in una certa maniera o col commandbuilder (il problema è che le tabelle non hanno una chiave primaria qndi viene generata un'eccezione)

Ciaooo!

Teech Profilo | Expert

Scusa il ritardo.
Partiamo da come il .NET Framework si comporta con i DataAdapter (molto in soldoni): ogni DataAdapter ha fondamentalmente un SelectCommand per popolare un DataTable (ogni DataTable può avere un solo Adapter). Oltre a questo ha anche dei Command per modificare i dati (Insert, Update e Delete).
Quando operi delle operazioni sui DataRow del DataTable lo stato (RowState) del DataRow cambia automaticamente (Added, Deleted e Updated). In base allo stato di ogni singola riga modificata sul DataTable, quando viene invocato il metodo Update dell'Adapter, viene eseguito il command associato.
Per costruire questi command puoi usare il CommandBuilder, ma essendo un metodo con delle specifiche ben precise è poco flessibile.
Per contro puoi scrivere i tuoi command e assegnarli all'Adapter in base alle varie fattispecie in cui ti trovi. La scrittura dei Command non deve avvenire con l'utilizzo di concatenamento di stringhe (o almeno è una tecnica sconsigliatissima) ma puoi usare i Parameters gestiti dai Command.

Penso di aver messo anche troppa carne al fuoco: cerca un po' di documentazione sul Web (ci sono migliaia di tutorial ed esempi) e se hai dubbi chiedi pure...

--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5