Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Con un prezzo di 2.999 euro, il Panasonic Z95BEG entra nella fascia ultra-premium dei TV OLED: pannello Primary RGB Tandem, sistema di raffreddamento ThermalFlow, audio Technics integrato e funzioni gaming avanzate lo pongono come un punto di riferimento
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-02-2010, 14:05   #1
J0k3r91
Member
 
Iscritto dal: Apr 2008
Messaggi: 101
[C#] Interazione fra C# e database SQL Server!

Ciao a tutti!

Mi trovo di fronte a un problema che cerco di risolvere ormai da diversi giorni.
Premetto che sono ancora uno studente e le mie conoscenze di programmazione (sopratutto se di mezzo c'è del SQL) non sono ancora proprio delle migliori!

Sto sviluppando un'applicativo C# in WPF che mi memorizzi e carichi dei dati da un database SQL Server da e nel mio programma.

Ho generato le Query GetData() e Fill() e la prima di esse funziona perfettamente.

Il mio problema sta nel Fill(): la Query SQL che mi fal'INSERT dei dati nel database è esatta (se infatti provo tramite Query Builder --> Execute Query funziona tutto e mi riempie la mia Table tblFilm senza problemi con una nuova row).

Ma come faccio a farlo tramite codice C#??

Sarà che faccio un gran casino fra sti TableAdapter, DataSet, DataTable, DataRow, ecc..!!

Al momento il mio codice in C# gira e non da errore, ma non fa proprio un bel niente!!

Qualcuno ha anche solo un codice generico per fare la Fill in un db?

La parte C# che non va è la seguente:
Codice:
tblFilmTableAdapter adapt = new tblFilmTableAdapter();
DsDataFilm.tblFilmDataTable table = new DsDataFilm.tblFilmDataTable(); //il mio DataSet
DataRow row = table.NewtblFilmRow();
row["TITOLO"] = "Prova";
row["ANNO"] = 1988;
row["GENERE"] = "Action";
row["RATING"] = 5;
row["TRAMA"] = "asdfghjklpoi";
row["LOCANDINA"] = "url:\\locandina.jpg";
adapt.FillBase(table, 4); //Fill della table fatta prima nella row con ID = 4.. (@Param1)
Dove "4" sarebbe l'ID della row da riempire..





Ho in realtà due metodi Fill (Fill e FillBase) uno che accetta una table e l'altro che accetta ogni singolo parametro. Nessuno dei due tramite C# va..

In definitiva.. come faccio a creare una nuova row e a metterci tutti i miei dati??

Qualcuno sa darmi una dritta? ho cercato in giro ma non ho trovato niente che mi funzionasse!
__________________
CPU: Intel Core 2 Quad Q8400@3.30Ghz cooled by Cooler Master Gemini II (413x8, FSB@1652Mhz, 1.44v) MB: Gigabyte GA-P45-UD3LR Ram: 4GB DDR2@826Mhz (5-7-7-20) Sk Video: XFX8800GT A.D. Edition XXX (GPU: 670Mhz, MEM: 1950Mhz, GDDR3 512Mb) HDD: 2xMaxtor DiamondMax 160GB 8Mb 7200rpm + Seagate 1Tb Alimentatore: Corsair TX650W Schermo: LCD ASUS VW222 22" Casse: Creative 5.1 S.O.: Windows 7 Ultimate 64bit Adsl (Down/Up): Fastweb 7Mbit / 512Kb Multimedia HDD: Iomega ScreenPlay Director HD 1Tb

Ultima modifica di J0k3r91 : 15-02-2010 alle 16:57.
J0k3r91 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2010, 13:05   #2
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Non prenderla come una "critica", ma francamente non vedo il perchè di tanta complicazione per fare una Insert su una tabella sola.
Il fatto che i DataSet siano il cuore di ADO.NET non significa che sia sempre obbligatorio farne uso.
Provato con un semplicissimo SqlCommand ?
http://www.codeproject.com/KB/databa...in_csharp.aspx
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2010, 13:21   #3
J0k3r91
Member
 
Iscritto dal: Apr 2008
Messaggi: 101
Ciao MarcoGG.

Il fatto è che i DataSet li DEVO utilizzare perchè sono parte dell'esercizio che dobbiamo svolgere!

Altrimenti l'avrei fatto prima..

Quindi, sempre utilizzando il DataSet.. come potrei fare

__________________
CPU: Intel Core 2 Quad Q8400@3.30Ghz cooled by Cooler Master Gemini II (413x8, FSB@1652Mhz, 1.44v) MB: Gigabyte GA-P45-UD3LR Ram: 4GB DDR2@826Mhz (5-7-7-20) Sk Video: XFX8800GT A.D. Edition XXX (GPU: 670Mhz, MEM: 1950Mhz, GDDR3 512Mb) HDD: 2xMaxtor DiamondMax 160GB 8Mb 7200rpm + Seagate 1Tb Alimentatore: Corsair TX650W Schermo: LCD ASUS VW222 22" Casse: Creative 5.1 S.O.: Windows 7 Ultimate 64bit Adsl (Down/Up): Fastweb 7Mbit / 512Kb Multimedia HDD: Iomega ScreenPlay Director HD 1Tb
J0k3r91 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2010, 13:24   #4
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Non prenderla come una "critica", ma francamente non vedo il perchè di tanta complicazione per fare una Insert su una tabella sola.
Il fatto che i DataSet siano il cuore di ADO.NET non significa che sia sempre obbligatorio farne uso.
Provato con un semplicissimo SqlCommand ?
http://www.codeproject.com/KB/databa...in_csharp.aspx
quoto. Connection e Command e se proprio ci si deve divertire si pilotano le Transaction.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2010, 13:54   #5
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da J0k3r91 Guarda i messaggi
Ciao MarcoGG.

Il fatto è che i DataSet li DEVO utilizzare perchè sono parte dell'esercizio che dobbiamo svolgere!

Altrimenti l'avrei fatto prima..

Quindi, sempre utilizzando il DataSet.. come potrei fare

Allora assicurati di eseguire l'AcceptChanges() sul DataSet ( o DataTable ) interessato, e poi esegui l'Update :
http://msdn.microsoft.com/it-it/libr...3x(VS.80).aspx

Il fatto che dichiari nel tuo post iniziale che il codice C# gira senza errori, ma a DB "non fa niente", mi fa pensare ad una dimenticanza di questo genere...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2010, 13:57   #6
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
e se proprio ci si deve divertire si pilotano le Transaction.
E ri-quoto. Certo, per chi ha uno strano concetto di "divertimento"...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2010, 14:24   #7
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Spero che sia un esercizio scolastico e non universitario, perchè programmare ad un solo livello, diciamo 1+ un wrapper, non è proprio il massimo, gestendo di fatto la persistenza dallo strato presentazione.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2010, 14:37   #8
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
Spero che sia un esercizio scolastico e non universitario, perchè programmare ad un solo livello, diciamo 1+ un wrapper, non è proprio il massimo, gestendo di fatto la persistenza dallo strato presentazione.
al corso di DB abbiamo fatto le peggio porcate dal punto di vista della separazione degli strati proprio perché era un esame di DB e non di Ingegneria del Software o Architetture Software

(resta cmq una porcata eh)
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2010, 17:20   #9
J0k3r91
Member
 
Iscritto dal: Apr 2008
Messaggi: 101
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
Spero che sia un esercizio scolastico e non universitario, perchè programmare ad un solo livello, diciamo 1+ un wrapper, non è proprio il massimo, gestendo di fatto la persistenza dallo strato presentazione.
Sisi è solo a livello scolastico superiore, non universitario
__________________
CPU: Intel Core 2 Quad Q8400@3.30Ghz cooled by Cooler Master Gemini II (413x8, FSB@1652Mhz, 1.44v) MB: Gigabyte GA-P45-UD3LR Ram: 4GB DDR2@826Mhz (5-7-7-20) Sk Video: XFX8800GT A.D. Edition XXX (GPU: 670Mhz, MEM: 1950Mhz, GDDR3 512Mb) HDD: 2xMaxtor DiamondMax 160GB 8Mb 7200rpm + Seagate 1Tb Alimentatore: Corsair TX650W Schermo: LCD ASUS VW222 22" Casse: Creative 5.1 S.O.: Windows 7 Ultimate 64bit Adsl (Down/Up): Fastweb 7Mbit / 512Kb Multimedia HDD: Iomega ScreenPlay Director HD 1Tb
J0k3r91 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2010, 17:27   #10
J0k3r91
Member
 
Iscritto dal: Apr 2008
Messaggi: 101
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Allora assicurati di eseguire l'AcceptChanges() sul DataSet ( o DataTable ) interessato, e poi esegui l'Update :
http://msdn.microsoft.com/it-it/libr...3x(VS.80).aspx

Il fatto che dichiari nel tuo post iniziale che il codice C# gira senza errori, ma a DB "non fa niente", mi fa pensare ad una dimenticanza di questo genere...
Ho aggiunto l'AcceptChanges() e infine l'Update() al programma, perchè precedentemente non le avevo messe.. continua comunque a non fare un bel niente!

Non so dove andare a parare..
__________________
CPU: Intel Core 2 Quad Q8400@3.30Ghz cooled by Cooler Master Gemini II (413x8, FSB@1652Mhz, 1.44v) MB: Gigabyte GA-P45-UD3LR Ram: 4GB DDR2@826Mhz (5-7-7-20) Sk Video: XFX8800GT A.D. Edition XXX (GPU: 670Mhz, MEM: 1950Mhz, GDDR3 512Mb) HDD: 2xMaxtor DiamondMax 160GB 8Mb 7200rpm + Seagate 1Tb Alimentatore: Corsair TX650W Schermo: LCD ASUS VW222 22" Casse: Creative 5.1 S.O.: Windows 7 Ultimate 64bit Adsl (Down/Up): Fastweb 7Mbit / 512Kb Multimedia HDD: Iomega ScreenPlay Director HD 1Tb
J0k3r91 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2010, 22:36   #11
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
E ri-quoto. Certo, per chi ha uno strano concetto di "divertimento"...
Personalmente ritengo i Dataset qualcosa di morto con VS2003.
Generics prima e Linq poi li hanno resi decisamente superati come tecnica di programmazione.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2010, 22:48   #12
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Personalmente ritengo i Dataset qualcosa di morto con VS2003.
Generics prima e Linq poi li hanno resi decisamente superati come tecnica di programmazione.
Quoto.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2010, 22:58   #13
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Personalmente ritengo i Dataset qualcosa di morto con VS2003.
Generics prima e Linq poi li hanno resi decisamente superati come tecnica di programmazione.
Bah, mi sembra un po' "fortina" come affermazione.
Chi ha imparato a sfruttare le potenzialità dei DataSet penso non sia molto d'accordo.
Sarà che io resto sempre scettico, e abbastanza "divertito" di fronte ad affermazioni come queste, se si rimane nel contesto italiano, dove vai ad un corso e senti il docente di turno dire "...è una tecnica di sviluppo ormai superata e... blah blah blah...", poi vai a fare un colloquio in una signora azienda, almeno sulla carta, e ti senti dire che hanno bisogno di un tizio che faccia classi in Java o .NET, che devono processare "tracciati record" in formato testo, che escono dal gestionale, al quale ovviamente nessuno vuole mettere mano, e che è scritto... in Cobol.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2010, 23:06   #14
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
I Dataset saranno effettivamente funzionali e produttivi soprattutto per programmatori poco esperti, ma di certo non sono il miglior esempio( soprattutto in ambito di flessibilità, scalabilità e riutilizzo) di programmazione.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2010, 23:23   #15
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da J0k3r91 Guarda i messaggi
Ho aggiunto l'AcceptChanges() e infine l'Update() al programma, perchè precedentemente non le avevo messe.. continua comunque a non fare un bel niente!

Non so dove andare a parare..
Ma l'Update l'hai fatto correttamente come nell'esempio alla pagina Msdn che ti ho linkato ?
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2010, 00:01   #16
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Bah, mi sembra un po' "fortina" come affermazione.
Chi ha imparato a sfruttare le potenzialità dei DataSet penso non sia molto d'accordo.
Il tempo che perdi a creare un dataset tipizzato con l'editor fornito da VS2005 in poi fa passare ogni voglia di utilizzarli (con Linq poi non se ne parla proprio).
Un Dataset non tipizzato è un incubo da gestire in un applicativo di una certa complessità, non sai mai chi ci ha messo le mani sopra e finchè non arrivi a spulciare la query di lettura e tutta l'elaborazione che c'è stata fatta sopra non sai cosa c'è dentro. Proprio la condizione ideale per qualunque business layer.

Mi sta capitando in questi giorni di mettere mano ad un progetto corposo (spacciato per essere in .NET 3.5) che fa uso esclusivo di Dataset non tipizzati in ogni punto ed è tutto un andare a cercare l'origine del dataset per sapere con cosa è stato valorizzato e successivamente da chi viene elaborato e tutto questo solo per conoscere cosa può esserci dentro quella scatola nera. Ma nessuno mi garantisce che una modifica alla query di partenza o qualche punto a valle non faccia poi schiantare il software in un punto remoto solo perchè non c'è più l'informazione che cercavo, stai sicuro che non riceverai nessun errore in compilazione e probabilmente anche l'Unit Test non ti porrà al riparo dagli errori, dovresti confidare nei test di integrazione (di difficile realizzazione se i punti da testare hanno diversi componenti che li separano).
Metti poi che in un database aziendale leggi con Viste e scrivi con Stored,
che non sono impiegabili nei webservice, a meno di non dare per scontato che il client sia in .NET e che chi sviluppa il client vada a spulciare il sorgente del webservice solo per capire cosa gli è stato ritornato.

Ce n'è abbastanza per relegarli al passato.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2010, 10:56   #17
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da J0k3r91 Guarda i messaggi
Ho aggiunto l'AcceptChanges() e infine l'Update() al programma, perchè precedentemente non le avevo messe.. continua comunque a non fare un bel niente!
Aggiungo un piccolo esempio ( con Access, per Sql basta cambiare i relativi oggetti del provider di dati opportuno e ovviamente la CN... ).
La tabella sul DB è "tblFilm".

> Dichiarazioni :
Codice:
        private OleDbDataAdapter DA = new OleDbDataAdapter(sqlSelect, CN);
        private DataSet DS = new DataSet();
Dove sqlSelect è una semplice "SELECT * FROM tblFilm".
CN è la Connection e DS è un semplice DataSet, quindi inutile scomodare altri oggetti, metodi strani, ecc. per gestire una tabella...

> Fill del DataSet ( viene fatto una volta sola all'avvio dell'applicazione ) e sua rappresentazione su un DataGridView :
Codice:
            DA.Fill(DS);
            DataGridView1.DataSource = DS.Tables[0];
> Aggiungo una nuova Row :
Codice:
            DataRow nuovaRiga = DS.Tables[0].NewRow();
            int nuovoID = Convert.ToInt32(DS.Tables[0].Compute("MAX(ID)", null)) + 1;
            nuovaRiga["ID"] = nuovoID;
            nuovaRiga["TITOLO"] = "Titolo";
            nuovaRiga["ANNO"] = 2010;
            nuovaRiga["GENERE"] = "Genere";
            nuovaRiga["RATING"] = 5;
            nuovaRiga["TRAMA"] = "Trama";
            nuovaRiga["LOCANDINA"] = "Locandina";
            DS.Tables[0].Rows.Add(nuovaRiga);

            if(DS.HasChanges()==true)
            {
                using(OleDbCommandBuilder CB = new OleDbCommandBuilder(DA))
                {
                    DA.UpdateCommand = CB.GetUpdateCommand();
                    DA.InsertCommand = CB.GetInsertCommand();   
                    DA.DeleteCommand = CB.GetDeleteCommand();
                    DA.Update(DS);
                }
            }
            DS.AcceptChanges();
            MessageBox.Show("Modifiche Salvate");
- nuovoID lo calcolo al momento dal DS stesso.
- Ovviamente anche qui sostituire con SqlCommandBuilder ecc...

Perciò, come già detto, niente di trascendentale.
Non so se la complessità della tua impostazione ( definizione di oggetti e metodi vari... ) faccia parte dell'esercizio.
Se l'unico requisito è "usate un DataSet", qui hai forse l'esempio più immediato che ti si possa fornire.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro) Recensione Google Pixel 10 Pro XL: uno zoom 100x...
La sorpresa di IAA Mobility è Xyt...
Le vetture elettriche Opel GSE: Mokka GS...
Star Wars: Knight of the Old Republic Re...
Scoperta un'enorme rete IPTV da pi&ugrav...
Anche Life is Strange diventerà u...
QSAN presenta la nuova serie XN1 di NAS ...
Abbiamo visto in anteprima nuova Renault...
Come ricaricare i veicoli elettrici sino...
Microsoft annuncia nuovi servizi azienda...
Roborock QV 35S spazza via lo sporco: po...
The Last of Us: arriva il primo Emmy per...
Firefox abbandona Linux a 32 bit: fine d...
Reti mobili italiane: chi vince e chi pe...
God of War: le riprese della serie TV ta...
Volkswagen ID. Cross Concept: design Pur...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:46.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v