Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
[ASP 2.0/VB] Manipolare Datatable
giovedì 05 giugno 2008 - 09.29
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Devil
Profilo
| Junior Member
109
messaggi | Data Invio:
gio 5 giu 2008 - 09:29
663_t1.zip
Ciao a tutti,
il mio obbiettivo è aggiungere dati nei campi di una tabella. Da vari esempi credevo di aver capito come fare ma il seguente codice genera un errore "La colonna 'testo' non appartiene alla tabella T1." al punto indicato con "<----"
Eppure io in SQL server ho una tabella chiamata T1 che ha 4 colonne come vedete nell'immagine allegata
221x96
4Kb
'connessione DB
'---------------------------------------
Dim connDb As SqlConnection
Dim cmdDb As SqlCommand
Dim dataA As SqlDataAdapter
connDb = New SqlConnection
cmdDb = New SqlCommand
connDb.ConnectionString = "Stringa di connessione"
connDb.Open()
' DataSet
Dim dataS As DataSet
'DataRow
Dim workRow As DataRow
'datTable
Dim dataT As DataTable
'Creo datatable
dataT = New DataTable("T1")
'Creo dataset
dataS = New DataSet()
'Aggiungo dataTable nel dataset
dataS.Tables.Add(dataT)
'Creazione rows
workRow = dataT.NewRow()
workRow("testo") = "Smith" <----------
workRow("data") = #1/1/2008#
workRow("numero") = 10
'inserimento nuovo record
dataT.Rows.Add(workRow)
....
...
Dove Sbaglio?
grazie ciao
amelix
Profilo
| Expert
694
messaggi | Data Invio:
gio 5 giu 2008 - 09:33
Scusa la domanda... Ma dove riempi il datatable da SQL? Oppure dove cotruisci la struttura del DataTable?
Fare
'Creo datatable dataT = New DataTable("T1")
Non è sufficente.
Andrea -
http://www.MelisWeb.eu/
CMS -
http://www.WebOrama.it/
Devil
Profilo
| Junior Member
109
messaggi | Data Invio:
gio 5 giu 2008 - 09:37
Ciao..che velocità!
ma non so..sono alle prime armi forse proprio non lo riempio!!
la tabella è su SQl server express sul mio pc forse manca del codice ma mi sembrava che dopo la connessione e creando una datatatble e indicandigli il nome della tabella fossi a posto.
Che codice manca?
amelix
Profilo
| Expert
694
messaggi | Data Invio:
gio 5 giu 2008 - 10:03
Direi che manca tutto...
Ti do 2/3 indizi... DataAdapter, SqlCommand e per ora basta...
Googola un po' e troverai tonnellate di esempi (anche in italiano) per popolare un dataTable.
Poi dovrai fare altre operazioni per salvare le modifiche fatte al DataTable (Update, Insert e Delete) ma questo è il prox passo.
Andrea -
http://www.MelisWeb.eu/
CMS -
http://www.WebOrama.it/
Devil
Profilo
| Junior Member
109
messaggi | Data Invio:
gio 5 giu 2008 - 10:07
cioè tu dici che manca questa parte?
cmdDb.CommandText = "Select * from T1"
cmdDb.CommandType = CommandType.Text
cmdDb.Connection = connDb
dataA = New SqlDataAdapter
dataA.SelectCommand = cmdDb
dataA.Fill(dataT)
Ma la tabella è vuota e non volevo riempirla con istruzioni sql ma manipolare ogni singolo record
Devo proprio passare per il command?
amelix
Profilo
| Expert
694
messaggi | Data Invio:
gio 5 giu 2008 - 10:17
Altrimenti ti devi costruire un xsd (DataSet Tipizzato) o costruirti la struttura a runtime.
Andrea -
http://www.MelisWeb.eu/
CMS -
http://www.WebOrama.it/
Devil
Profilo
| Junior Member
109
messaggi | Data Invio:
gio 5 giu 2008 - 10:20
ok provo a documentarmi sul dataset tipizzato che l'ho gia letto in giro,
comunque la struttura della tabella è già esistente come vedi dall'immagine devo solo aggiungere record di volta in volta..
ok grazie per il momento..
Mikyct86
Profilo
| Junior Member
81
messaggi | Data Invio:
gio 5 giu 2008 - 11:56
Public Shared Function GetTransactionByTran(ByVal tranAbs As Integer) As DataTable
Dim mySQLcommand As New SqlCommand()
Dim connect As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
connect.Open()
mySQLcommand.Connection = connect
Dim sql As String = "select * from absTransaction where nTranAbs = " & tranAbs
mySQLcommand.CommandText = sql
Dim da As New SqlDataAdapter(mySQLcommand)
connect.Close()
Dim dta As New DataTable
da.Fill(dta)
da.Dispose()
Return dta
End Function
Puoi usare questa sintassi...
Questa funzione ad esempio crea una datatable da una sql semplice con un parametro passato alla funzione.
Ovviamente nn ho inserito la connection string che dovrai inserire.
Devil
Profilo
| Junior Member
109
messaggi | Data Invio:
gio 5 giu 2008 - 12:02
ciao,
ma devo per forza passare per il command..
l'esempio che ho trovato su msdn è questo:
' Instantiate the DataSet variable.
dataSet = New DataSet()
' Add the new DataTable to the DataSet.
dataSet.Tables.Add(table)
' Create three new DataRow objects and add
' them to the DataTable
Dim i As Integer
For i = 0 to 2
row = table.NewRow()
row("id") = i
row("ParentItem") = "ParentItem " + i.ToString()
table.Rows.Add(row)
Next i
...
io mi ero basato su questo...no??
è proprio quello che volevo fare ..senza il for
Mikyct86
Profilo
| Junior Member
81
messaggi | Data Invio:
gio 5 giu 2008 - 12:14
Allora tu hai una tabella in sql express giusto?
quindi l'insert del row la devi inserire sulla tabella in sql o vuoi solo modificare la tua table che hai sul codice?
Spiegami meglio cosa vuoi fare.
Cmq sul tuo codice ce un errore di base.non hai creato la colonna "testo"
dim dc as new datacolumn
dc.ColumnName = "testo" 'creo la nuova colonna
table.Columns.Add(dc)
Ma cosi facendo hai tutto ancora nella table temporanea ma non sul db!
invece con questa funzione inserisci il valore nella tabella in sql
Public Shared Function Insert(ByVal idAs Integer,ByVal testo as string) As DataTable
Dim mySQLcommand As New SqlCommand()
Dim connect As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
connect.Open()
mySQLcommand.Connection = connect
Dim sql As String = "insert into table(id,testo) values(" & id & "," & testo & ")" "
mySQLcommand.CommandText = sql
Dim da As New SqlDataAdapter(mySQLcommand)
connect.Close()
Dim dta As New DataTable
da.Fill(dta)
da.Dispose()
Return dta
End Function
amelix
Profilo
| Expert
694
messaggi | Data Invio:
gio 5 giu 2008 - 12:17
La "table" su MSDN ha una struttura... che ti DEVI fare a mano se NON vuoi passare dal DB.
La sintassi new DataTable(...) non implica costruzione di colonne!
Secondo te con che criterio le dovrebbe costruire? Se non gli fornisci la fonte dati e gli fai dare una sbirciatina...
Andrea -
http://www.MelisWeb.eu/
CMS -
http://www.WebOrama.it/
Mikyct86
Profilo
| Junior Member
81
messaggi | Data Invio:
gio 5 giu 2008 - 12:24
Ovvio è come dice Amelix! Devi crearti le colonne se vuoi creare una table da zero!
Ma se ti appoggi a un db in sql express nn vedo che senso ha crearti un db cosi.meglio che lavori con sql express!
o meglio ancora con stored procedure!
Devil
Profilo
| Junior Member
109
messaggi | Data Invio:
gio 5 giu 2008 - 13:42
Ah forse comincio a capire...
ero convinto che modifiche sul datatable fosse come lavorare direttamente sulla tabella ma non ho pensato al fatto che può lavoarare in modalità disconnessa!!
la tabella sta sul db
in sostanza io volevo fare una cosa che ho gia fatto con access cioè mi collego alla tabella con il recordset e nei campi che dico io metto un valore (che nel mio caso prendo da una cella di excel)
esempio sintetizzato: recordset.fields("nome campo").valore=foglioexcel.range("a1").valore
in ASP entrano in ballo più oggetti e qui sicuramente sbaglio qualcosa.
i passi che vorrei fare sono:
collegarmi al foglio excele estrapolare i dati dalle celle che mi ineressano---ok fatto
collegarmi al db sql exp -----ok fatto
copiare il valore di una cella in un campo di una tabella---?
farlo in maniera simile a quello che ho fatto in access devo usare data adapter dataset e data tadle + altri oggetti però sbaglio ad utilizzarli.
qualche indicazione sui passaggi da eseguire?
Devil
Profilo
| Junior Member
109
messaggi | Data Invio:
gio 5 giu 2008 - 14:05
Intanto faccio un pò di prove...
però ipotizzando che riesca a costruire la struttura della mia tabella e poi ad inserire i record e i valori per ogni campo ...poi?..come spiegargli di riversare il tutto nella tabella di destinazione cioè quella sul server?
Devil
Profilo
| Junior Member
109
messaggi | Data Invio:
gio 5 giu 2008 - 14:26
forse a questo punto mi sto convincendo che faccio prima a fare una "insert into...." passando parametri(anche se molto lunga)...credevo fosse sbrigativo come in vba o mi sbaglio?
Mikyct86
Profilo
| Junior Member
81
messaggi | Data Invio:
gio 5 giu 2008 - 14:30
perfetto ti estrapoli tutto dall'excel.dopo di che devi fare una insert SQL.
Public Shared Function Insert(ByVal id As Integer, ByVal testo As String, ByVal data As DateTime, ByVal numero As Integer) As DataTable
Dim mySQLcommand As New SqlCommand()
Dim connect As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
connect.Open()
mySQLcommand.Connection = connect
Dim sql As String = "insert into t1(id,testo,data,numero) values(" & id & "," & testo & "," & data & "," & numero & ")"
mySQLcommand.CommandText = Sql
Dim da As New SqlDataAdapter(mySQLcommand)
connect.Close()
Dim dta As New DataTable
da.Fill(dta)
da.Dispose()
Return dta
End Function
puoi benissimo copiare questa perche dovrebbe essere corretta per il tuo lavoro
e la usi cosi:
Insert(id,testo,data,numero)
Devil
Profilo
| Junior Member
109
messaggi | Data Invio:
gio 5 giu 2008 - 14:47
ok mi sono convinto e sto provando...
naturalmente la tabella non è solo t1, quella era solo di prova e per semplificare le cose, infatti sono più tabelle e con decine di campi in cui memorizzare testo e valori numerici( a titolo informativo rilievi di livelli rumore in aree produttive di uno stabilimento metalmeccanico) comunque la strada da percorrere è questa..
grazie mille a tutti per l'assistenza
Torna su
Stanze Forum
Elenco Threads
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 !