Newsgroup: it.comp.software.database
Titolo: [niubbo] Oracle, .NET e XML

Ciao, 
premetto che sono alle prime armi in ciascuno degli "ambiti" che ho
indicato in oggetto.
Supponiamo di avere un file XML, rappresentante un set di righe di una
tabella di un db Oracle.
La domanda è semplice: come faccio a caricare i dati contenuti nel
file XML nella tabella corrispondente su Oracle ?
Se ci sono più alternative, qual'è la migliore ?
E' garantita la "transazionalità" dell'operazione ? Ossia, dato un file
XML e presupposta l'esistenza di una procedura di caricamento,
l'operazione è transazionale (tutte le righe o nessuna) ?
Grazie in anticipo.
Paolo.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 l'operazione č transazionale (tutte le righe o nessuna) ?
Dipende dal programma.
Davide
-- 
Windows 95 is crash compatible with Windows 1.0, 2.x, and 3.x.

 Paolo.
lavori con il DataSet, localmente, lo modifichi, poi scrivi le
modifiche con il metodo Update()
questo e' tratto da una mia applicazione, e' in C++ perche' andava
assieme a porzioni di codice nativo ma puo' essere tradotto
facilmente:
public: System::Void SynchWeb()
			{
			// lettura del file xml da web e modifica del data set
			// associato a dataGrid_Articoli
				 try
				 {
					DataSet *xmlDataset = new DataSet();
					//WebProxy *proxy = new WebProxy(
					// controllare se e' possibile settare il proxy
					xmlDataset->ReadXml(S"
http://www.3bsoft.com/tmaker_catalogue.xml
");
					//DataTable *xmlTable = xmlDataset->Tables->GetEnumerator;
                    IEnumerator *e =
xmlDataset->Tables->GetEnumerator();
					// mi posiziono sul primo elemento
					e->MoveNext();
					DataTable *xmlTable = (DataTable *)e->Current;
					DataSet *dataset = (DataSet *)dataGridArticoli->DataSource;
					if (dataset == NULL)
						{
						MessageBox::Show(S"You must load a DataSet");
						return;
						}
                    e = dataset->Tables->GetEnumerator();
					e->MoveNext();
					DataTable *table = (DataTable *)e->Current; // TMAKER_ARTICLES,
potrei anche riferirla per nome
                    //DataTable *table = dataset->Tables[0]; // ???
chiedere perche' non funziona
					e = xmlTable->Rows->GetEnumerator();
					while (e->MoveNext())
						{
						DataRow *xmlRow = (DataRow *)e->Current;
						DataRow *rows __gc[] =
table->Select(System::String::Format(S"code = '{0}'",
							xmlRow->Item[S"code"]->ToString()));
						DataRow *row ;
						if (rows->Length>0) //(rows>0)
							{
							// riga presente, testare per update
							// in ogni caso ce n'e' una sola
							row = rows[0];
							// TO DO: riempimento campi
							// ciclo su tutte le colonne
							IEnumerator *columns = table->Columns->GetEnumerator();
							while (columns->MoveNext())
								{
								DataColumn *dc = __try_cast<DataColumn *>(columns->Current);
 
								if (row->Item[dc->ColumnName]->ToString() !=
xmlRow->Item[dc->ColumnName]->ToString())
									{
									row->Item[dc->ColumnName] =
xmlRow->Item[dc->ColumnName]->ToString();
 
									// do la possibilita' di salvare
							        //menuDataSaveChanges->Enabled = TRUE;
									}
								}
							}
						else
							{
							// la riga va aggiunta, ogni campo va letto dal recordset xml
							row = table->NewRow();
 
							// TO DO: riempimento campi
							// ciclo su tutte le colonne
							IEnumerator *columns = table->Columns->GetEnumerator();
							while (columns->MoveNext())
								{
								DataColumn *dc = __try_cast<DataColumn *>(columns->Current);
 
								System::String *newValue =
xmlRow->Item[dc->ColumnName]->ToString();
 
								if (newValue != S"")
									row->Item[dc->ColumnName] = newValue;
								}
 
							table->Rows->Add(row);
							// do la possibilita' di salvare
							//menuDataSaveChanges->Enabled = TRUE;
							SaveChanges();
							}
						}
				 }
				 catch (Exception *ex)
				 {
					//TileMakerConnection::HandleException(S"Non sono riuscito a
caricare il file xml", ex);
				 }
				 __finally
				 {
					// Cleanup
				 }
			}

Ciao,
avendo citato .NET il programma me lo sto facendo io......
