|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
|
[VB.NET 2008] Database
Salve, ho un problema, inserito in input due valori da textbox, deve andare a fare la ricerca in un database e se trovato, deve restituirmi in un altra textbox il valore:
codice Codice:
Private Sub Button1_Click_2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Aprichiudi.Click
Dim ConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Fabio\Desktop\Codice Fiscale\Comuni.accdb;Persist Security Info=False;"
Dim Cn As New OleDbConnection(ConnString)
Dim sql As String = "select NAZIONALE from italia where COMUNE=txtCOMUN and PROVINCIA=txtPROV"
If Cn.State = ConnectionState.Open Then Cn.Close()
If Aprichiudi.Text = "&Connetti" Then
Cn.Open()
Aprichiudi.Text = "&Disconnetti"
Else
Aprichiudi.Text = "&Connetti"
Cn.Close()
End If
If (Cn.State) = ConnectionState.Open Then
MessageBox.Show("Il db adesso è connesso", _
"Attenzione", MessageBoxButtons.OK, _
MessageBoxIcon.Information)
Dim cmd As New OleDbCommand(sql, Cn)
Dim testo As String
testo = cmd.ExecuteNonQuery()
txtout.Text = testo
Else
MessageBox.Show("Il db adesso è disconnesso", _
"Attenzione", MessageBoxButtons.OK, _
MessageBoxIcon.Information)
End If
End Sub
Dice oledbexception non è stata gestita, nessun valore specificato per alcuni parametri necessari. Cosa sto sbagliando? Ultima modifica di Fabio7586 : 07-04-2009 alle 14:08. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2005
Città: Trieste
Messaggi: 2285
|
ma gli passi i parametri nella query?
io vedo solo che costruisci la stringa... cosa sono e come sono settati txtCOMUN e txtPROV? magari serve una cosa del genere, supponendo txtCOMUN e txtPROV varabili inizializzate prima a tua discrezione Dim sql As String = "select NAZIONALE from italia where COMUNE= ' " & txtCOMUN & " ' and PROVINCIA= ' " & txtPROV & " ' "
__________________
neo mini v2 / asus strix z490i / 10600k@? / uh12s / rx6700xt / 32gb ddr4@3200 / sandisk 250 + asenno 1tb / lenovo g34w
trattative concluse : tante... |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
Quote:
Dim sql As String = "SELECT NAZIONALE FROM italia WHERE COMUNE = ? AND PROVINCIA = ?" Dim cmd As New OdbcCommand (sql) cmd.Parameters.Add(txtCOMUN.Text) cmd.Parameters.Add(txtPROV.Text) o qualcosa del genere, non ricordo esattamente la sintassi per aggiungere parametri ad un OdbcCommand. Ma meglio che la concatenazione di stringhe! |
|
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
|
Quote:
Sono due textbox; in che senso costruisco solo la stringa? Dove lavoro io, creiamo software di gestione aziendale, e non ho alcun problema a lavorare con i database, tant'è vero che le query che scrivo sono tutte del tipo select campo1 as qualcosa,campo2 as qualcosa,campo3 as qualcosa from table where table.campo1=variabile1,table.campo2=varibile2 eventualmente group by order by etc.. Quote:
Ho fatto come hai detto, solo scrivendo oledbcommand e non odbc Codice:
Private Sub Button1_Click_2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Aprichiudi.Click
Dim ConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Fabio\Desktop\Codice Fiscale\Comuni.accdb;Persist Security Info=False;"
Dim Cn As New OleDbConnection(ConnString)
Dim sql As String = "select NAZIONALE from italia where COMUNE=? and PROVINCIA=?"
If Cn.State = ConnectionState.Open Then Cn.Close()
If Aprichiudi.Text = "&Connetti" Then
Cn.Open()
Aprichiudi.Text = "&Disconnetti"
Else
Aprichiudi.Text = "&Connetti"
Cn.Close()
End If
If (Cn.State) = ConnectionState.Open Then
MessageBox.Show("Il db adesso è connesso", _
"Attenzione", MessageBoxButtons.OK, _
MessageBoxIcon.Information)
Dim cmd As New OleDbCommand(sql)
Dim testo As String
cmd.Parameters.Add(txtCOMUN.Text)
cmd.Parameters.Add(txtPROV.Text)
testo = cmd.ExecuteNonQuery()
txtout.Text = testo
Else
MessageBox.Show("Il db adesso è disconnesso", _
"Attenzione", MessageBoxButtons.OK, _
MessageBoxIcon.Information)
End If
End Sub
OleDbParameterCollection accetta solo oggetti di tipo OleDbParameter non null, non oggetti String. Ultima modifica di Fabio7586 : 07-04-2009 alle 15:55. |
||
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: May 2005
Città: Trieste
Messaggi: 2285
|
Quote:
era giusto per dare una soluzione veloce
__________________
neo mini v2 / asus strix z490i / 10600k@? / uh12s / rx6700xt / 32gb ddr4@3200 / sandisk 250 + asenno 1tb / lenovo g34w
trattative concluse : tante... |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
|
Help!
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
|
Quote:
OleDbParameterCollection accetta solo oggetti di tipo OleDbParameter non null, non oggetti String. due post più su c'è il codice che ho usato! |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
Vedi il costruttore di un OleDbParameter cosa chiede
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Per quanto riguarda OleDbParameter, forse meglio questa soluzione, più corretta e leggibile ( su DB Access 2003, per 2007 modificare la strCN... ) : Codice:
Dim strCN As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & percorso & "nomeDB.mdb" & ";Persist Security Info=False"
Dim CN As New OleDb.OleDbConnection(strCN)
Dim strSql As String = "SELECT * FROM nomeTabella WHERE id=@id AND nome=@nome"
Dim CMD As New OleDb.OleDbCommand(strSql, CN)
CMD.Parameters.Add("@id", OleDb.OleDbType.BigInt)
CMD.Parameters.Add("@nome", OleDb.OleDbType.VarChar)
'...
'Assegnazione Parametri :
CMD.Parameters("@id").Value = txt_id.Text
CMD.Parameters("@nome").Value = txt_nome.Text
'...
CN.Open()
Dim RDR As OleDb.OleDbDataReader = CMD.ExecuteReader()
While (RDR.Read())
'...
'...
End While
RDR.Close()
CN.Close()
|
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
Che io sappia il provider OleDb non supporta i parametri con nome.
Cosí come il provider MySql marca i parametri con "?" (es: ?name). Ultima modifica di Kralizek : 08-04-2009 alle 10:20. |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Io uso quella tecnica praticamente tutte le volte che ho a che fare con DB Access. Forse ti riferisci ad un ADO.Net precedente al 2.0... |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
|
Quote:
Perchè mi consigli il provider 4.0 e non 12.0? Io l'ho preso da stringconnection, che differenza c'è? Edit: Pardon...non avevo ben capito che avevi scritto di cambiare strcon! Poi per passare il valore ottenuto dalla query, basta che assegno la variabile strsql nella textbox? P.s. se è possibile qualcuno può spiegarmi come faccio a fare un oggetto che mi compare a video con un timer, che dura finchè il database non si connette? Ultima modifica di Fabio7586 : 08-04-2009 alle 10:32. |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
|
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
La connessione è praticamente istantanea. La apri / la usi / la chiudi. Oltretutto tenere connessioni inutili aperte, in giro per l'applicazione, e soprattutto con Access, non è mai una buona idea... |
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
|
Quote:
Non è una preoccupazione sui tempi del database, figurati, era solo per fare una cosa carina ^_^ |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
|
Ho Provato questo:
Codice:
Private Sub Button1_Click_2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Aprichiudi.Click
Dim ConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Fabio\Desktop\Codice Fiscale\Comuni.accdb;Persist Security Info=False;"
Dim Cn As New OleDbConnection(ConnString)
Dim sql As String = "select NAZIONALE from italia where COMUNE=@idcomune and PROVINCIA=@idprovincia"
Dim cmd As New OleDbCommand(sql, Cn)
cmd.Parameters.Add("@idcomune", OleDb.OleDbType.LongVarChar)
cmd.Parameters.Add("@idprovincia", OleDb.OleDbType.LongVarChar)
If Cn.State = ConnectionState.Open Then Cn.Close()
If Aprichiudi.Text = "&Connetti" Then
Cn.Open()
Aprichiudi.Text = "&Disconnetti"
Else
Aprichiudi.Text = "&Connetti"
Cn.Close()
End If
If (Cn.State) = ConnectionState.Open Then
MessageBox.Show("Il db adesso è connesso", _
"Attenzione", MessageBoxButtons.OK, _
MessageBoxIcon.Information)
cmd.Parameters("@idcomune").Value = txbLNasc.Text
cmd.Parameters("@idprovincia").Value = txbProvNasc.Text
Dim RDR As OleDb.OleDbDataReader = cmd.ExecuteReader()
While (RDR.Read())
'...
txtout.Text = cmd.ExecuteNonQuery()
'...
End While
RDR.Close()
Else
MessageBox.Show("Il db adesso è disconnesso", _
"Attenzione", MessageBoxButtons.OK, _
MessageBoxIcon.Information)
End If
End Sub
Ultima modifica di Fabio7586 : 09-04-2009 alle 12:32. |
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Se la tua query era "select NAZIONALE from italia ... ", a questo punto esiste un campo "NAZIONALE" nella tabella risultati restituita dal DataReader, perciò semmai : Codice:
While (RDR.Read())
'...
txtout.Text = RDR("NAZIONALE")
'...
End While
|
|
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Dec 2007
Città: Napoli
Messaggi: 392
|
Quote:
GrazIEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE!!!!!! |
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Risposta a tuo pvt :
Se vuoi riutilizzare il mio codice al post #10, basta che nel ciclo di lettura del DataReader, per ogni Record restituito, tu vada ad aggiungere una riga al DataGridView, che avrai già formattato in design mode costruendo le colonne di formato appropriato. Altro metodo è usare un DataSet, ma in quel caso il codice andrà modificato. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:18.




















