Insert/update di campi calcolati

martedì 29 novembre 2005 - 12.52

teologoeretico Profilo | Newbie

Salve a tutti...sono nuovo di queste parti e avrei bisogno di un chiarimento.
Ho letto l'utilissimo articolo sui campi calcolati in un database (o eventualmente in un dataset, con codice runtime).
( http://www.dotnethell.it/articles/ADOChildTables.aspx ).

Ora, ho provato a sfruttare questa possibilità, per permettere all'utente di riempire un datagrid e visualizzare nello stesso i risultati dell'inserimento.
Mi spiego meglio: lavorando in modalità "connessa" con Ado.Net, in un datagrid, sono visualizzati 3 campi A, B, C, dove C è il mio campo calcolato ottenuto da A+B. In pratica:

mioDataSet.miaTabella.Columns.Add("C", GetType(Int32), "[A]+[B]")

In visualizzazione, tutto funziona perfettamente.

Poichè voglio salvare le modifiche che l'utente ha effettuato sul datagrid (o meglio, sulla DataTable miaTabella), dovrei usare il comando Update, del DataAdapter che gestisce il mio Dataset.

mioAdapter.Update(mioDataSet.miaTabella.Select(Nothing, Nothing, DataViewRowState.Added))

E anche qui tutto bene.
A questo punto però voglio fare anche l'insert (o l'update) della colonna calcolata che ho aggiunto prima in visualizzazione, su un apposito campo vuoto nel DB. Ovvero voglio memorizzare i valori della mia colonna C nel database, dove esiste una colonna analoga.

Ho provato a fare il mapping della DataTable sul DB, ma,giustamente, Visual Studio mi segnala che è impossibile mappare, poichè il campo C della mia DataTable è una colonna calcolata!!

Qualcuno può indicare se esiste un approccio diverso? Magari usando delle Label dentro il Datagrid, sul campo C e non considerare il campo come calcolato, ma semplicemente leggendo il valore text della Label, su cui scarico il "compito" del calcolo? In tal caso...come faccio ad inserire un controllo qualsiasi dentro una cella del datagrid? :)

Oddio...so di essere stato un po' tortuoso, ma non saprei come meglio descrivere la situazione :)

Anticipatamente ringrazio :)


Jumpa Profilo | Junior Member

posso permettermi una considerazione?

una colonna calcolata tipicamente ed inq uesto caso mi sembra di capire che lo è, è una ridondanza, ovvero i dati memorizzati sono dipendenti e ricavabili da altri dati memorizzati all'interno del db.
In genere nella progettazione di un DB si cerca di evitare qualsiasi tipo di ridondanza, questo perchè diviene piu efficiente in termini di robustezza e consistenza dei dati. ( oltre che a salvare spazio )
Si usano ridondanze ogni qualvolta ci sono criticità in termini di performance, ad esempio memorizzo il risultato di una somma se questo è un dato che viene letto un numero di volte considerevolmente piu alto rispetto alle scritture che vengono effettuate, ed ho esigenza che le letture siano fatte risparmiando al massimo le risorse del sistema.

detto ciò purtroppo non ti sò aiutare su ciò che vuoi realizzare... ma credo che cio che ho scritto sia una linea guida generale da seguire prima di impelagarsi in impicci :-))))))

buon lavoro

Jumpa!

-------------------------
191 for ever.....................
Follow the White Rabbit...

http://www.jumpa.org
-------------------------

totti240282 Profilo | Guru

Bè potresti fare una insert prendendo i valori dalla cella del datagrid,nel campo calcolato.

C'è solo un capitano !!!!!!

teologoeretico Profilo | Newbie

Quindi, in ogni caso, dovrei riscrivere "al volo" un InsertCommand.CommandText, passando comunque per una nuova stringa SQL ... e rinunciando a sfruttare il metodo Update del DataReader, giusto? :)

"All I want is a Dataset..."

teologoeretico Profilo | Newbie

Per Jumpa: considerazioni assolutamente esatte e del tutto condivisibili :)

Ma ridondare questo dato, in questa occasione, mi permetterebbe di avere un'applicazione più veloce, poichè il db (Access, per l'esattezza) non dovvrebbe svolgere calcoli o aggregazioni, ma semplici letture, in fase di recupero dei dati.

"All I want is a Dataset..."

Jumpa Profilo | Junior Member

e allora dillo che usi JPERDBMS access!!! :-)))
per la cronaca JPERDBMS sta per JE PIACEREBBE ESSE RDBMS!!

-------------------------
191 for ever.....................
Follow the White Rabbit...

http://www.jumpa.org
-------------------------
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