2009-06-05 4 views
6

Sto combattendo un progettista DataSet VS2008 recalcitrante, a quanto pare. Ho cercato di fare ciò che sembra essere una semplice soluzione di set di dati a due tabelle, in cui una tabella è semplicemente il significato testuale di un valore intero memorizzato nell'altra tabella. progettazione dati di base 101.Cosa è successo ai comandi di aggiornamento e cancellazione del mio TableAdapter?

Table1 
CharField1 
CharField2 
IntForeignKeyField1 
etc 

Table2 
IntPrimaryKey1 
ValueForKeyField 

che in realtà non influisce sul problema che sto avendo, non credo, come io non sto volendo fare altro che leggere i valori in dalla seconda tabella in modo che posso sceglierli in un DataGridViewComboBoxColumn nel client - non li modificherò mai sul client. Ma sto divagando.

Dal momento che questo vive in un servizio Web, e volevo un dataset fortemente tipizzato consegnato ai client di questo servizio web, ho deciso di utilizzare DataSet Designer per costruire i TableAdapters e tutti gli impianti idraulici, pensando che potrebbe essere inferiore lavoro e più facile da mantenere.

Quindi, ho creato le belle scatole e modificato le istruzioni di selezione, istruendo il progettista per creare tutti i comandi Inserisci, Aggiorna e Elimina per l'adattatore da usare. E 'felicemente obbligato, informandomi che tutto è stato fatto come ho chiesto.

Quando ho provato a utilizzare l'istruzione di aggiornamento, tuttavia, ho ricevuto un errore che diceva che non esisteva una dichiarazione di aggiornamento valida! Dopo alcune ricerche infruttuose in giro per persone con problemi simili sul web, ho scavato nell'XML per il set di dati. Abbastanza sicuro, nessuna istruzione Update e nessuna istruzione Delete, neanche.

Ho provato completamente a cancellare e ricreare il DataSet dal progetto, con gli stessi risultati. Nessuna istruzione Update o Delete è stata creata, anche se è stata segnalata come completata.

Ho finito con la compilazione XML dell'istruzione Update a mano, ispezionando un altro set di dati progettato da un altro progetto, quindi il servizio Web ora funziona. Tuttavia, non ho alcuna fiducia che i miei cambiamenti potrebbero durare attraverso una modifica avviata dal designer, e sono perplesso sul motivo per cui non funziona. Qualche idea?

Grazie per tutte le risposte, Dave

+1

Dalla mancanza totale di commenti, ritengo che questo non sia successo a nessun altro, quindi ho un vero bug o problema tecnico nella mia implementazione VS2008. Grande. E ho anche ottenuto il distintivo di una tessera a ventaglio per il privilegio. – DaveN59

risposta

13

potrebbe essere che non c'è una chiave primaria univoco definito per la tabella?

+0

Doh! Grazie per aver sottolineato l'ovvio ... – DaveN59

+0

Non mi sento schifoso, ho fatto la stessa cosa :(Impostare il PK nel DB ha risolto lo stesso problema per me. – sMaN

0

Ho lo stesso problema. Il TableAdapter non funziona correttamente quando si usano campi da più di una tabella. Sono stato in grado di ricreare la soluzione dal seguente articolo: "Aggiornamento del TableAdapter per l'utilizzo di join".

http://www.asp.net/learn/data-access/tutorial-69-vb.aspx

La soluzione consiste nel creare il proprio Select/aggiornamento/inserimento/Cancella procedure. Sfortunatamente, mentre ero in grado di seguire la soluzione per un database sqlserver, non sono ancora in grado di farlo funzionare per il mio database di Access locale. Tutte le opzioni della stored procedure sono disattivate.

Buona fortuna!

+0

Grazie per il link all'articolo. il problema (e forse anche il tuo) è più semplice di così: tutto ciò che dovevo fare era definire le chiavi primarie e una relazione nel designer di SQL Studio, e VS piaceva molto bene. Non so come siano i tuoi dati, ma VS può ottenere un po 'di informazioni da SQL Server - o meno, apparentemente. – DaveN59

0

Penso di aver trovato la soluzione. 1) Creare un TableAdapter solo per la tabella principale e copiare la procedura UPDATE di TableAdapter (memorizzata nella finestra delle proprietà TableAdapter) 2) Modificare la query SELECT nel "Generatore di query della Configurazione guidata tabellaAdapter" per includere i campi da entrambe le tabelle e il join. 3) Incollare la vecchia procedura UPDATE nella procedura UPDATE ora vuota di TableAdapter. 4) Dopo aver creato DataGridView, è possibile visualizzare i campi da entrambe le tabelle e aggiornare la tabella principale. Ripetere i passaggi per INSERIRE i comandi & DELETE.

Se l'obiettivo è aggiornare entrambe le tabelle, provare a esaminare le informazioni di aggiornamento padre/figlio di TableAdapter sul Web. Ecco un buon collegamento: http://blogs.msdn.com/bethmassi/archive/2009/05/14/using-tableadapters-to-insert-related-data-into-an-ms-access-database.aspx

+0

Troppo lavoro! :) Questo è essenzialmente ciò che ho fatto per farlo funzionare. Tuttavia, ha funzionato in modo molto fluido e pulito, senza modificare manualmente nulla, quando ho definito chiavi e relazioni primarie nel database - VS2008 ha capito come fare ciò che doveva fare da quelle informazioni, senza alcun intervento manuale ... – DaveN59

+0

Hai questa soluzione per funzionare per MS Access? Sto avendo questo problema esatto e sto cercando di far funzionare il tuo metodo. –

0

Appena incontrato lo stesso problema di base. Ho detto al progettista dati di creare tutte le istruzioni di inserimento, aggiornamento, cancellazione. Quando sono andato ad aggiornare uno dei tavoli non c'era nessun aggiornamento disponibile. Finalmente sono andato nel file .xsd creato dal progettista dei dati (appena fatto doppio clic per aprirlo nell'IDE). Ho quindi fatto clic con il tasto destro sulla barra del titolo della tabella che presentava il problema e ho selezionato l'opzione di configurazione. Da lì ho fatto clic sul pulsante "Opzioni avanzate", quindi ho selezionato l'opzione "Genera Inserisci, Aggiorna, Elimina dichiarazioni". Dopo aver premuto OK, ho controllato il mio progetto e l'aggiornamento era disponibile per l'adattatore da tavolo.

0

Ciò che George ha suggerito è fantastico. Dobbiamo abilitare l'opzione 'Genera Inserisci, Aggiorna, Elimina dichiarazioni'.

Tuttavia in VS2013, l'utilizzo di qualificatori di tabella non necessari nell'istruzione selete può modificare l'IDE e generare solo le istruzioni SELECT e INSERT. Basta rimuovere questo qualificatore e dovrebbe andare bene. Assicurati di avere anche un PK unico.

Se è necessario utilizzare il riempimento complicato come applicare il filtro per restituire solo determinate righe della tabella, è possibile riempire la tabella di dati utilizzando un'istruzione select specifica nell'evento di caricamento del modulo. In questo modo, le istruzioni INSERT, UPDATE e DELETE generate continueranno a funzionare, poiché DELETE e UPDATE funzionano sul PK.