Il dataset non "ricorda" le nuove tabelle

sabato 17 maggio 2008 - 17.00

gothrek Profilo | Newbie

salve,
sono giorni che provo a cercare in rete una soluzione ma non riesco a venirne a capo, e spero qualcuno sicuramente più capace di me, mi possa aiutare.
La premessa è:
ho un DB access (dataset chiamato multidisdbdataset)
programmo in vb.net
ho la necessità di creare nuove tabelle che siano la copia di altre già esistenti e che abbiano gli stessi metodi.
Il programma gestisce la distribuzione di periodici ed esiste una tabella per ogni periodico, ovvero una distribuzione per ogni periodico, dove per distribuzione si intende che quella rivista va in determinati punti piuttosto che altri.
Esiste sempre nel db una distribuzione standard di tutti i punti.
Quando viene aggiunta una nuova rivista il programma dovrebbe creare una copia della distribuzione standard con il nome della nuova testata.
fine della premessa.

ho provato a creare la nuova tabella in 2 modi il primo effettivamente sul db mi crea la tabella mentre il secondo (non capisco perchè, no):
1 metodo (funzionante con il nome della tabella corrispondente alla variabile nomedistribuzione):
Dim Cmd As OleDbCommand
Dim SQL As String
Dim objCmd As New OleDbCommand
Dim Con = New OleDbConnection(My.Settings.MultiDisDBConnectionString)
SQL = "CREATE TABLE " & nomedistribuzione & " (PI NUMBER PRIMARY KEY, Copie NUMBER DEFAULT 0)"
Cmd = New OleDbCommand(SQL, Con)
Try
Con.Open()
objCmd = New OleDbCommand(SQL, Con)
objCmd.ExecuteNonQuery()
For k As Integer = 0 To Me.MultiDisDBDataSet.DistribuzioneDefault.Rows.Count - 1
SQL = "INSERT INTO " & nomedistribuzione & " VALUES (" & Me.MultiDisDBDataSet.DistribuzioneDefault.Item(k).PI & ", 0) "
objCmd = New OleDbCommand(SQL, Con)
objCmd.ExecuteNonQuery()
Next
Dim adapter As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter("SELECT * FROM " & nomedistribuzione, My.Settings.MultiDisDBConnectionString)
adapter.TableMappings.Add(nomedistribuzione, "MultiDisDBDataSet")
adapter.Fill(Me.MultiDisDBDataSet)
Dim Cmdcom As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)
Con.Close()
Me.MultiDisDBDataSet.Tables.Add(nomedistribuzione, nomedistribuzione)
Me.MultiDisDBDataSet.AcceptChanges()
Catch ex As Exception
MsgBox(ex.Message)
End Try

metodo2 (non vengono scritte nel db le tabelle anche se sembrano regolarmnete create):
Dim table As DataTable = New DataTable(nomedistribuzione)
Dim row As DataRow
Try
Dim colonnapi As DataColumn = New DataColumn("PI")
colonnapi.DataType = System.Type.GetType("System.Int32")
table.Columns.Add(colonnapi)
Dim colonnacopie As DataColumn = New DataColumn("Copie")
colonnacopie.DataType = System.Type.GetType("System.Int32")
table.Columns.Add(colonnacopie)
For k As Integer = 0 To Me.MultiDisDBDataSet.DistribuzioneDefault.Rows.Count - 1
row = table.NewRow()
row.Item("PI") = Me.MultiDisDBDataSet.DistribuzioneDefault.Item(k).PI
row.Item("Copie") = 0
table.Rows.Add(row)
table.AcceptChanges()
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
Me.MultiDisDBDataSet.Tables.Add(nomedistribuzione, nomedistribuzione)
Me.MultiDisDBDataSet.AcceptChanges()

perchè il 2 metodo non registra le modifiche?

cmq, a parte questo, voi potreste dire, se ti funziona, usa il primo metodo, ok, ma pur creando le tabelle di fatto il dataset non le vede infatti se in un'altra maschera provo a farne il flll mi da errore nessun elemento fill pubblico. Io tutte le altre tabelle di distribuzione le ho create semplicemente trascinandole nello schema, e in automatico mi ha generato il metodo fill mentre se creo la tabella a mano come faccio?

ed infine, ho visto che tutte le tabelle, colonne, e righe sono secificate in un file xml che rappresenta la struttura (strongly) del mio dataset come è possibile aggiungere anche le nuove tabelle in quel file da runtime?

Spero, nonostante la mia ignoranza, sia stato abbastana chiaro.

Grazie

Luca

help
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5