|
|
IN-VESTI DNW!!! Sono finalmente arrivate le nuovissime T-Shirt di DotNetWork!!! Con soli 15,00 € ci sosterrai nelle spese di gestione della Community e ti invieremo a casa una splendida maglietta. Se vuoi contribuire al mantenimento di DotNetWork.it Vai sulla pagina Iscrizioni Effettua il pagamento usando IWBank Oppure un Bonifico bancario (le coordinate sono sulla pagina Iscrizioni), inviaci una mail a support@dotnetwork.it indicandoci la tua taglia e l'indirizzo di spedizione. Non appena verificata la ricezione del pagamento provvederemo a spedirti la tua T-Shirt. Le magliette sono disponibili nelle taglie S-M-L-XL-XXL (in caso di esaurimento di una delle taglie, indica quella di "Backup"). Grazie per IN-VESTIRTI con NOI!!! .:DotNetWork Founders:.
|
|
|
|
|
HELP- inserire dati da form in un database ms sql
Ultimo Post 03 ott 2009 13.38 by jzgrafica. 45 Risposte.
|
Ordina:
|
| Autore |
Messaggi |
 |
 Posts:129
 |
| 19 set 2009 15.58 |
|
ciao a tutti, sono nuova di qui  sto creando un sito in asp.net per un mio cliente.. Ho un problema sull'inserimento dati da un form nel database ms sql... utilizzo visual studio 2008, e ms sql 2000. dunque, il mio problema è su una web form, nella quale il mio cliente dovrà inserire i dati delle sue auto per inserirle in un database... la form è questa 
al click sul pulsante inserisci, i dati dovrebbero andare a finire nella tabella TabCaratteristiche:

solo che non so come fare...ho provato in diversi modi ma nessuno funzionava, poi ho provato a creare un dataset con visual studio ( con il dataset designer), ma ora non so che farmene.. nella parte di codice aspx.vb non ho scritto ancora nulla, perchè non so cosa scrivere...vi chiedo aiuto urgente, perche senza questa parte non posso fare il resto del sito del mio cliente...
Ho studiato asp.net all'università 7 anni fa, la mia memoria è arruginita ... ed ora ho un pò d'urgenza..vi sembrerò imbranata ma... |
|
|
|
|
 Posts:537
 |
| 19 set 2009 16.07 |
|
Benvenuta tra noi. Sinceramente odio ASPX (preferisco le applicazione WinForm o WPF).
dovresti prima decidere come accedere al DB: via StoredProcedure o direttamente con codice SQL dalla pagina ASPX.
Io ti consiglio SP in modo che parametrizzi tutto. Non so se c'è qualcosa negli articoli..prova a guardare.
Comunque informati sulle SP ed il loro utilizzo che è fantastico.
|
|
|
|
|
 Posts:129
 |
| 19 set 2009 16.34 |
|
Ciao grazie per la risposta, ho provato ad usare le store procedure, ma quando definisco i parametri ( nella UPDATE , tipo update TabCaratteristiche (marca,modello ecc) VALUES (@Marca,@modello ) e poi definisco i parametri sotto (@Marca= DDL_Marca.SelectedItem.text) mi dice che il parametro marca non è definito...
Inoltre, vorrei usare i dataset per evitare di fare troppi danni al DB in caso di errori, solo che non so come fare ... l'ho creato, con il TableAdapter, ma non so proprio dove metter mano...anche perchè non so se la datagrid dove verranno visualizzati i dati inseriti dal form, devo metterla nella pagina del form o in un altra pagina....ed in tal caso, come collego la seconda pagina con la datagrid alla pagina dalla quale prelevo i dati ( la pagina del Form ) ?
|
|
|
|
|
 Posts:662
 |
| 19 set 2009 16.41 |
|
solo che non so come fare...ho provato in diversi modi ma nessuno funzionava, poi ho provato a creare un dataset con visual studio ( con il dataset designer), ma ora non so che farmene.. nella parte di codice aspx.vb non ho scritto ancora nulla, perchè non so cosa scrivere...vi chiedo aiuto urgente, perche senza questa parte non posso fare il resto del sito del mio cliente... Ho studiato asp.net all'università 7 anni fa, la mia memoria è arruginita ... ed ora ho un pò d'urgenza..vi sembrerò imbranata ma... Ciao e benvenuta. L'essere come tu dici "imbranati" è la condizione per cui questa community esiste  quindi non preoccuparti e considera che ogni domanda è legittima. Per quanto riguarda il tuo problema la logica con cui lavorano le applicazioni winform e webform da un punto di vista di interfaccia con i dati sono, nella sostanza, le stesse: mi creo una struttura dati a livello client che rappresenti il set di dati che voglio esporre, mi collego attraverso una connessione dati (tipicamente una connessione odbc, sqlclient o oracle nel caso in cui il db sia un DBMS, oppure attraverso XML qualora si scelga questo tipo di repository, oltre a questi anche Excel, file di testo, ecc... ) al mio repository, popolo un'istanza della struttura con i dati che ho sul repository e successivamente eseguo il binding sui controlli che mi espone la mia UI. Tu hai fatto quasi tutto... ti manca un oggetto SqlDataSource per accedere al db e l'istruzione per popolarlo... HTH Alberto |
|
|
|
|
 Posts:537
 |
| 19 set 2009 16.43 |
|
Insomma. Io per evitare danni, evito il DataSet creato dal Wizard di VS. Fare tutto a manina comporta più controllo di tutto. per i Parametri dovresti postare un poco di codice. Vai a manina e vedrai che ti trovera meglio...con i Wizard non sai mai cosa succede...quarda gli articoli di Sabrina dal suo Blog..si riferiscono a WinForm ma è uguale per ASPX |
|
|
|
|
 Posts:129
 |
| 19 set 2009 17.01 |
|
ecco qui un pò di codice che avevo scritto,tre tipi di connessioni al DB con le instruzioni...
- NON FUNZIONA : Dim strconn As String
strconn = "Database=Ioscauto;Provider=OleDb;DataSource=localhost;"
'strconn = "Database=ioscauto;Provider=SQLOLEDB;integrated security=SSPI;data source=localhost;persist security info=False"
'"workstation id=CHERE;packet size=4096;"
Dim objConn As New OleDb.OleDbConnection(strconn)
'Dim objCmd As New OleDbCommand(strSQL, objConn)
'Dim @marca as New string
Dim marca As String
Dim km As Integer
Dim modello As String
Dim anno As Integer
Dim trazione As String
Dim tagliandi As String
Dim cilindrata As Integer
Dim alimentazione As String
Dim colore As String
Dim nporte As Integer
Dim tipologia As String
Dim opt As String
Dim altro As String
Dim prezzo As Integer
Dim Connection As New SqlClient.SqlConnection
marca = DDL_Marca.SelectedItem.Text
km = TB_Km.Text
modello = DDL_Modello.SelectedItem.Text
anno = DDL_Anno.SelectedItem.Value
trazione = DDL_Trazione.SelectedItem.Text
tagliandi = TB_Tagliandi.Text
cilindrata = DDL_Cilindrata.SelectedItem.Text
alimentazione = DDL_Alimentazione.SelectedItem.Text
colore = TB_Colore.Text
nporte = TB_Porte.Text
tipologia = TB_TIpologia.Text
opt = LB_optional.SelectedItem.Text
altro = TB_caratteristiche.Text
prezzo = TB_Prezzo.Text
Dim strSQL As String
strSQL = "INSERT INTO Caratteristiche ('marca','modello','anno','trazione','km','tagliandi','cilindrata','cv','kw','alimentazione','colore','nporte','tipologia','optional','altro','prezzo')VALUES('marca','modello',@anno,'trazione',@km,'tagliandi','cilindrata',@cv,@kw,'alimentazione','colore',@nporte,'tipologia','opt','altro',@prezzo)"
Dim objCmd As New OleDb.OleDbCommand(strSQL, objConn)
Connection = New Data.SqlClient.SqlConnection(strconn)
objCmd.Connection.Open()
Dim CMD As New System.Data.SqlClient.SqlCommand(strSQL, Connection)
objCmd.ExecuteNonQuery()
objCmd.Connection.Close()
- SECONDO TIPO DI CONNESSIONE CON ISTRUZIONI
Dim marc As String
Dim model As String
Dim conn As New System.Data.SqlClient.SqlConnection
Dim strconn As String 'definisco la stringa per aprire l aocnnessione
Dim strsql As String 'definisco stringa contenente l'istruzione SQL
Dim ann As Integer
Dim traz As String
Dim kim As Integer
Dim tagliand As String
Dim cil As String
Dim cav As Integer
Dim kilo As Integer
Dim alim As String
Dim col As String
Dim nport As Integer
Dim tipo As String
Dim opt As String
Dim altro As String
Dim prez As Integer
marc = DDL_Marca.SelectedItem.Text
model = DDL_Modello.SelectedItem.Text
ann = DDL_Anno.SelectedItem.Value
traz = DDL_Trazione.SelectedItem.Text
kim = TB_Km.Text
tagliand = TB_Tagliandi.Text
cil = DDL_Cilindrata.SelectedValue
cav = TB_CV.Text
kilo = TB_KW.Text
alim = DDL_Alimentazione.SelectedItem.Text
col = TB_Colore.Text
nport = TB_Porte.Text
tipo = TB_TIpologia.Text
opt = LB_optional.Text
altro = TB_caratteristiche.Text
prez = TB_Prezzo.Text
'strsql = "INSERT INTO TabCaratteristiche(marca,modello,anno,trazione,km,tagliandi,cilindrata,cv,kw,alimentazione,colore,nporte,tipologia,optional,altro,prezzo) VALUES ('marc','model','ann','traz','kim','tagliand','cilindrata','cav','kilo','alim','col','nport','tipo','opt','altro','prez'"
strconn = "workstation id=JZONTINI;integrated security=SSPI;Data Source=JZONTINI;Asynchronous Processing=true;Initial Catalog=ioscauto;persist security info=False;"
'strconn = "Provider=SQLOLEDB;;Integrated Security=SSPI;Initial Catalog=ioscauto;Asynchronous Processing=true"
'creo la stringa di connessione al DB
conn = New Data.SqlClient.SqlConnection(strconn)
'apro la connessione al DB
conn.Open()
'Dim CMD As New SqlClient.SqlCommand
'CMD = New Data.SqlClient.SqlCommand(strsql, conn)
'CMD.BeginExecuteNonQuery()
DDL_Marca.Text.Insert(0, marc)
DDL_Modello.Text.Insert(1, model)
DDL_Anno.SelectedValue.Insert(1, ann)
DDL_Trazione.SelectedValue.Insert(1, traz)
TB_Km.Text.Insert(1, kim)
TB_Tagliandi.Text.Insert(1, tagliand)
DDL_Cilindrata.SelectedValue.Insert(1, cil)
TB_CV.Text.Insert(1, cav)
TB_KW.Text.Insert(1, kilo)
DDL_Alimentazione.SelectedValue.Insert(1, alim)
TB_Colore.Text.Insert(1, col)
TB_Porte.Text.Insert(1, nport)
TB_TIpologia.Text.Insert(1, tipo)
LB_optional.SelectedValue.Insert(1, opt)
TB_caratteristiche.Text.Insert(1, altro)
TB_Prezzo.Text.Insert(1, prez)
conn.Close()
-
Dim strconn As String 'definisco la stringa per aprire l aocnnessione
Dim strsql As String 'definisco stringa contenente l'istruzione SQL
Dim conn As New System.Data.SqlClient.SqlConnection
strconn = "workstation id=JZONTINI;integrated security=SSPI;Data Source=JZONTINI;Asynchronous Processing=true;Initial Catalog=ioscauto;persist security info=False;"
strsql = "INSERT INTO TabCaratteristiche(marca,modello,anno,trazione,km,tagliandi,cilindrata,cv,kw,alimentazione,colore,nporte,tipologia,optional,altro,prezzo) VALUES (@marc,@model,@ann,@traz,@kim,@tagliand,@cil,@cav,@kilo,@alim,@col,@nport,@tipo,@opt,@altro,@prez)"
conn = New Data.SqlClient.SqlConnection(strconn)
conn.Open()
@marc as New varchar (50),
@model varchar (50),
@ann int (4),
@traz varchar (50),
@kim bigint (8),
@tagliand varchar (50),
@cil varchar (50),
@cav int (4),
@kilo int (4),
@alim varchar (50),
@col varchar (50),
@nport int (4),
@tipo varchar (50),
@opt varchar (500),
@altro varchar (500),
@prez bigint (8)
(questa con StoreProcedure)
NESSUNA DI QUESTE FUNZIONAVA... per questo, ho deciso di usare un dataset...solo che non so come usarlo XD |
|
|
|
|
 Posts:537
 |
| 19 set 2009 18.29 |
|
stai mischiando OleDb con SqlClient...letto così non si capisce nulla...questo lo scrivi nel file VB (o C#) ? la connessione dove la tieni? nel WebConfig? spero di si. questa è una stringa di connessione ad un SQL 2008 con provider SQL: Naturalemente sta nel web.config e la richiamo dalla pagina ASPX col nome PanatronicConnectionString. |
|
|
|
|
 Posts:129
 |
| 19 set 2009 18.42 |
|
stai mischiando OleDb con SqlClient...letto così non si capisce nulla...questo lo scrivi nel file VB (o C#) ? VB la connessione dove la tieni? nel WebConfig? spero di si.
ehm....non capisco cosa intendi....usando sql server...la tengo su sql server..il web config non l'ho toccato per non fare danni... cosa dovrei fare ? cmq la stringa (ultima ) che ho creato l'ho creato con il sqlDataSource nella finestra di sx , sotto la voce dati...ioscautoConnectionString...
questa è una stringa di connessione ad un SQL 2008 con provider SQL:
non vedo la stringa... Naturalemente sta nel web.config e la richiamo dalla pagina ASPX col nome PanatronicConnectionString.
e come si richiama ? cmq il problema oltre a questo rimane sempre l'update...
per farti capire meglio.... questo è il dataset creato in vs 2008 ( Ho creato una stored procedure per l'Update, me l'ha inserita nel datatableadapter, ma comunque non so come richiamarla nella mia pagina...

e questo invece è il codice della mia pagina Default.aspx ( quella con il form)

|
|
|
|
|
 Posts:811
 |
| 19 set 2009 21.18 |
|
Se quello che ti serve è solo inserire dati, ti ho preparato un esempio funzionante.
Lo trovi in allegato al messaggio.
saluti
Sabrina |
Attachment: UpdateSqlfromAsp.zip
|
| Sabrina |
|
|
 Posts:129
 |
| 20 set 2009 10.27 |
|
ciao ! grazie mille, ora scarico e ti dico se funziona ... ^__^ |
|
|
|
|
 Posts:129
 |
| 20 set 2009 10.38 |
|
ciao scaricato, ma è C#...vero ? io uso VB..posso prendere spunto dalla tua per svilupparla in VB, solo che non so dove mettere questo pezzo :
<br><br>namespace UpdateSqlfromAsp<br>{<br> public partial class _Default : System.Web.UI.Page<br> <br> {<br> string mSqlInsert = @"<br> INSERT INTO TbTestAsp<br> ([Codice]<br> ,[descrizione])<br> VALUES<br> (@Codice<br> ,@Descrizione)<br> ";<br><br> |
|
|
|
|
 Posts:129
 |
| 20 set 2009 11.17 |
|
Allora, ho provato ad adattarlo a VB così (Per comprendere meglio il codice, ho provato su una pagina di login dell'utente, con solo due TextBox, una per il nome e l'altra per la password):
<br><br>Imports System
Imports System.Collections
Imports System.Configuration
Imports System.Data
Imports System.Linq
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.HtmlControls
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Xml.Linq
Imports System.Data.SqlClient
Partial Class Login
Inherits System.Web.UI.Page
Protected Sub B_invia_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles B_invia.Click
If TB_nome.Text = "FrancoDamianoIosca" Then
If TB_password.Text = "semprelavora" Then
Server.Transfer("Default.aspx")
End If
If TB_password.Text <> "semprelavora" Then
MsgBox("la password non corrisponde al nome", MsgBoxStyle.AbortRetryIgnore)
Server.Transfer("Login.aspx")
End If
End If
If TB_nome.Text = "jzgrafica" Then
If TB_password.Text = "cm653rh" Then
Server.Transfer("Default.aspx")
End If
If TB_password.Text <> "cm653rh" Then
MsgBox("la password non corrisponde al nome", MsgBoxStyle.AbortRetryIgnore)
Server.Transfer("Login.aspx")
End If
End If
End Sub
Public Sub SqlParameterCollection(ByVal ParamArray([byval parapara][byval parapara2]) as new SqlParameter)
Dim parapara As New SqlParameter
Dim parapara2 As New SqlParameter
parapara.SqlValue = TB_nome.Text
parapara2.SqlValue = TB_password.Text
End Sub
Protected Sub B_registrati_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles B_registrati.Click
Dim cn As New SqlConnection()
cn.ConnectionString = "Data Source=JZONTINI;Initial Catalog=ioscauto;Integrated Security=True"
Dim strconn As New SqlCommand("INSERT INTO TabUtente (nome,password)VALUES(@nome,@password)")
Dim cmd As New SqlCommand()
cmd.Connection = cn
cmd.CommandText = strconn.CommandText
cmd.Parameters.AddRange = SqlParameter
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
this.Label3.Text = "OK Inserito";
End Sub
End Class
però mi da errore su : Public Sub SqlParameterCollection(ByVal ParamArray([byval parapara][byval parapara2]) as new SqlParameter) , nella parte ByVal paramArray ( mi segna la prima parentesi e mi dice che vuole un identificatore ) ..
Di conseguenza mi da errore anche qui:
cmd.Parameters.AddRange = SqlParameter
|
|
|
|
|
 Posts:129
 |
| 20 set 2009 12.00 |
|
credo di aver quasi risolto così...il problema è che non capisco come dire a VB che le variabili TuoNome e TuoCognome sono quelle da inserire nel DB ( quelle dell'istruzione SQL, per intenderci ) ..se metto la chiocciolina (@TuoNome=parapara.value -o parapara.text-) mi segna la chiocciolina come errore e mi dice errore di sintassi..Comunque, questo è il codice quasi sistemato credo...
Imports System
Imports System.Collections
Imports System.Configuration
Imports System.Data
Imports System.Linq
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.HtmlControls
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Xml.Linq
Imports System.Data.SqlClient
Partial Class Login
Inherits System.Web.UI.Page
Protected Sub B_invia_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles B_invia.Click
If TB_nome.Text = "FrancoDamianoIosca" Then
If TB_password.Text = "semprelavora" Then
Server.Transfer("Default.aspx")
End If
If TB_password.Text <> "semprelavora" Then
MsgBox("la password non corrisponde al nome", MsgBoxStyle.AbortRetryIgnore)
Server.Transfer("Login.aspx")
End If
End If
If TB_nome.Text = "jzgrafica" Then
If TB_password.Text = "cm653rh" Then
Server.Transfer("Default.aspx")
End If
If TB_password.Text <> "cm653rh" Then
MsgBox("la password non corrisponde al nome", MsgBoxStyle.AbortRetryIgnore)
Server.Transfer("Login.aspx")
End If
End If
End Sub
Protected Sub B_registrati_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles B_registrati.Click
Dim cn As New SqlConnection()
cn.ConnectionString = "Data Source=JZONTINI;Initial Catalog=ioscauto;Integrated Security=True"
Dim strconn As New SqlCommand("INSERT INTO TabUtente (nome,password)VALUES(TuoNome,TuaPassword)")
Dim cmd As New SqlCommand()
Dim parapara As New SqlParameter
Dim parapara2 As New SqlParameter
parapara.Value = TB_nome.Text
parapara2.Value = TB_password.Text
cmd.Connection = cn
cmd.CommandText = strconn.CommandText
cn.Open()
Dim TuoNome As New SqlParameter
Dim TuaPassword As New SqlParameter
TuoNome = parapara
TuaPassword = parapara2
cmd.ExecuteNonQuery()
cn.Close()
Label3.Text = "OK Inserito"
End Sub
End Class
|
|
|
|
|
 Posts:811
 |
| 20 set 2009 12.47 |
|
Ci sono dei siti appositi x le traslazioni C# VB e viceversa, trovi i links sulla pagina Utility  Public Partial Class _Default
Inherits System.Web.UI.Page
Private mSqlInsert As String = vbCr & vbLf & vbTab & vbTab & vbTab & "INSERT INTO TbTestAsp" & vbCr & vbLf & " ([Codice]" & vbCr & vbLf & " ,[descrizione])" & vbCr & vbLf & vbTab & vbTab & vbTab & "VALUES" & vbCr & vbLf & " (@Codice" & vbCr & vbLf & " ,@Descrizione)" & vbCr & vbLf & vbTab & vbTab & vbTab
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
Me.Label3.Text = "Provo ad inserire"
Dim cn As New SqlConnection()
cn.ConnectionString = "Data Source=4unb20;Initial Catalog=paperinik;User Id=paperuser;Password=rinikpaper;"
Dim cmd As New SqlCommand()
Dim para As SqlParameter() = _ New SqlParameter() { _ New SqlParameter("@Codice", Me.txtCode.Text), _ New SqlParameter("@Descrizione", Me.txtDescription.Text)}
cmd.Connection = cn
cmd.CommandText = mSqlInsert
cmd.Parameters.AddRange(para)
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
Me.Label3.Text = "OK Inserito"
End Sub
End Class
la sola cosa di cui non sono sicura è la conversione dell'array di parametri ma mi pare che sia così.
Fai attenzione che il SQL che esegui direttamente per una login dovrà fare una select e tornarti almeno un valore pertanto dovrai usare l'ExecuteScalar se ti viene restituito un solo valore oppure dovrai dichiarare un SQLDatareader e usare l'ExecuteReader del command per ottenere una o più righe contenenti il risultato della query.
saluti Sabrina
|
|
| Sabrina |
|
|
 Posts:129
 |
| 20 set 2009 14.14 |
|
ok funziona !! Ora ho bisogno di comprendere alcune cose però, per poterla utilizzare con la testa ( e non solo con il copia incolla XD ) ... cosa sono questi simboli: vbCr & vbLf & vbTab & vbTab & vbTab & ?? Sono necessari ? e se voglio una select ( per permettere all'utente registrato di accedere ) uso sempre quelli nella funzione che chiamero msqlselect? Poi,dimmi se ho capito giusto: Dim cn As New SqlConnection() // DICHIARO LA VARIABILE PER LA CONNESSIONE cn.ConnectionString = "Data Source=4unb20;Initial Catalog=paperinik;User Id=paperuser;Password=rinikpaper;" // SPECIFICO ALLA VARIABILE DOVE CONNETTERSI Dim cmd As New SqlCommand() //CREO UNA VARIABILE PER INSERIRE COMANDI SQL Dim para As SqlParameter() = _ // CREO UNA FUNZIONE PER DEFINIRE I PARAMETRI (è giusto??? ) New SqlParameter() { _ // QUESTO COSA FA ?!?! New SqlParameter("@Codice", Me.txtCode.Text), _ //QUI SPECIFICO QUALI VALORI INSERIRE NEI PARAMETRI,ED ANCHE NELLA RIGA SUCCESSIVA New SqlParameter("@Descrizione", Me.txtDescription.Text)} cmd.Connection = cn // DO LA CONNESSIONE AL MIO COMANDO SQL cmd.CommandText = mSqlInsert // SPECIFICO L'ISTRUZIONE SQL DA ESEGUIRE AL MIO COMANDO cmd.Parameters.AddRange(para) // QUI ? AL COMANDO AGGIUNGO I PARAMETRI DEFINITI PRIMA ?? cn.Open() //APRO LA CONNESSIONE cmd.ExecuteNonQuery() // ExecuteNonQuery L'ho sempre usato, MA COSA FA DI PRECISO ? cn.Close() //CHIUDO LA CONNESSIONE Me.Label3.Text = "OK Inserito"
|
|
|
|
|
 Posts:129
 |
| 20 set 2009 15.32 |
|
infatti, ho provato così ( sul form della login ho due pulsanti, uno per la registrazione ed uno per l'accesso..quello per la registrazione finalmente funziona, grazie al vostro aiuto ) e quello per l'accesso l'ho strutturato così...
Private mSqlselectnome As String = vbCr & vbLf & vbTab & vbTab & vbTab & "Select " & vbCr & vbLf & " ([nome]" & vbCr & vbLf & " )" & vbCr & vbLf & "From TabUtente" & vbCr & vbLf & vbTab & vbTab & vbTab
Private mSqlselectPassword As String = vbCr & vbLf & vbTab & vbTab & vbTab & "Select " & vbCr & vbLf & " ([password]" & vbCr & vbLf & " )" & vbCr & vbLf & "From TabUtente" & vbCr & vbLf & vbTab & vbTab & vbTab
Protected Sub B_invia_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles B_invia.Click
Dim cn2 As New SqlConnection()
cn2.ConnectionString = "Data Source=JZONTINI;Initial Catalog=ioscauto;Integrated Security=True"
cn2.Open()
Dim cmd As New SqlCommand()
Dim cmd2 As New SqlCommand
cmd.Connection = cn2
cmd2.Connection = cn2
cmd.CommandText = mSqlselectnome
cmd2.CommandText = mSqlselectPassword
Dim strnome As String
Dim strpass As String
strnome = cmd.CommandText
strpass = cmd2.CommandText
If TB_nome.Text.ToString = strnome Then
If TB_password.Text.ToString = strpass Then
Server.Transfer("Default.aspx")
End If
If TB_password.Text.ToString <> strpass Then
Me.Label3.Text = "errore"
MsgBox("la password non corrisponde al nome", MsgBoxStyle.AbortRetryIgnore)
Server.Transfer("Login.aspx")
End If
End If
cmd.ExecuteNonQuery()
cn2.Close()
End Sub
Ma non fa nulla, anche se i dati che inserisco ( nome e password ) sono corretti....non mi da alcun errore, però non mi manda alla pagina Default.aspx |
|
|
|
|
 Posts:129
 |
| 20 set 2009 18.01 |
|
ok ho provato a gestire l'inserimento dei dati con il form iniziale ( quello dove il cliente doveva inserire le auto ) ... funziona per quasi tutto solo che ho un problemino sulla label per aggiungere foto ( quella che visual studio mette a disposizione chiamandola File Upload ) .... come la gestisco ? New SqlParameter("@foto", Me.FU_foto.PostedFile)} cosi non funziona e mi da errore.. pur avendo scritto il codice per verificare che non sia vuota
If Not FU_foto.HasFile = False Then
Dim filepath As String = FU_foto.PostedFile.FileName
Dim pat As String = "\\(?:.+)\\(.+)\.(.+)"
Dim r As Regex = New Regex(pat)
'run
Dim m As Match = r.Match(filepath)
Dim file_ext As String = m.Groups(2).Captures(0).ToString()
Dim filename As String = m.Groups(1).Captures(0).ToString()
Dim filefoto As String = filename & "." & file_ext
'save the file to the server
FU_foto.PostedFile.SaveAs(Server.MapPath(".\") & filefoto)<br><br>---------------------<br><br>Altra cosa, sulla pagina del login....la registrazione funziona, ma ora anche inserendo i dati corretti non riconosce nessuno degli utenti... <br> |
|
|
|
|
 Posts:129
 |
| 20 set 2009 18.28 |
|
GRAZIE DI CUORE A TUTTI !!! Ho risolto quasi tutto , ora carica i dati nel database, ho risolto anche il problema foto... mi manca solo il problema sulla select ( per il form login, per permettere il riconoscimento degli utenti registrati ) ... ed un ultima cosuccia, la sintassi per modificare i dati inseriti nel database, direttamente dal form ..per cancellarli l'ho creata, ma per modificarli ho qualche problema sull'istruzione ... |
|
|
|
|
 Posts:129
 |
| 20 set 2009 18.33 |
|
ah dimenticavo, problemino anche sugli optional ... lui può selezionare + opitonal perchè la textbox è il modalità multiline...però me ne filtra uno solo nel DB.. |
|
|
|
|
 Posts:435
 |
| 21 set 2009 08.47 |
|
Ciao, che problema hai esattamente sulla login ? Provo a darti una mano... Max |
|
|
|
|
 Posts:435
 |
| 21 set 2009 09.43 |
|
Io in una mia form di login ho usato questo sistema (che ha un difetto da sistemare che spiego dopo) Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click If DBAuthenticate(Me.TextBox1.Text, Me.TextBox2.Text) Then Response.Redirect("/tickets/default.aspx") Else Response.Write("Login FAILED ") End If End Sub
Private Function DBAuthenticate(ByVal strUsername As String, ByVal strPassword As String) As Boolean Dim bResult As Boolean = False Dim cn As New Data.SqlClient.SqlConnection("") cn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings.Item("DatabaseConnectionString").ToString Dim strSQL As String Dim strDBPassword As String = "" Dim objCommand As New Data.SqlClient.SqlCommand objCommand.Connection = cn strSQL = String.Format("SELECT ID, password, ruolo, tipo FROM Anagrafica WHERE (Username='{0}');", strUsername) objCommand.CommandText = strSQL objCommand.CommandType = Data.CommandType.Text Dim rdr As Data.SqlClient.SqlDataReader cn.Open() rdr = objCommand.ExecuteReader If rdr.Read Then strDBPassword = CheckDBNull(rdr("password")) ' password salvata nel db bResult = strDBPassword = CryptPwd(strPassword, "SHA1") 'debug, setto a true sempre bResult = True Session("Username") = strUsername Session("LoggedIn") = bResult Session("Ruolo") = CheckDBNull(rdr("Ruolo")) Session("Tipo") = CheckDBNull(rdr("Tipo")) Session("ID") = CheckDBNull(rdr("ID")) Session("Filtro") = CheckDBNull(rdr("Tipo")) End If cn.Close() Return bResult End Function
il problema e' che messa giu cosi si presta ad una "code Injection", se io nella password scrivo ad esempio: aaa 'OR 1=1' la qery ritornerà sempre un valore valido e quindi mi autentica in ogni caso. va fatto in modo che quel codice sql sia invalidato... per il resto funziona alla grande. nelle tue pagine (o nella master page, se la usi) metti un check della variabile "authenticated" che in caso di "false" rimanda alla pagina di login. In questo modo se uno uol far eil furbetto non puo' accedere alla pagina mettendo l'url completo. HTH Max. |
|
|
|
|
 Posts:811
 |
| 21 set 2009 10.45 |
|
Inserito da jzgrafica su 20 set 2009 16.32 infatti, ho provato così ( sul form della login ho due pulsanti, uno per la registrazione ed uno per l'accesso..quello per la registrazione finalmente funziona, grazie al vostro aiuto ) e quello per l'accesso l'ho strutturato così...
Allora, ho quotato l'inizio messaggio perché tu sappia a cosa rispondo:
i vbcr, vbtab ecc. messi dal convertitore sono porcherie perché VB non gestisce bene le stringhe su più righe, avrei dovuto pulirteli scusa.
Nel codice che hai inserito in questo messaggio, hai fatto una funzione che non esegue alcun comando pertanto non potrà mai funzionare.
Se vuoi fare una autenticazione modello base la select sarà: Dim sql as string = "SELECT Login from Tbutenti where Login = @Login and Password = @Password"
Dim para as SQLParameter() = new SqlParameter { New SqlParameter( "@Login", txtLogin.text), New SqlParameter( "@Password", txtPassword.text ) }
Dim cn as SqlConnection = new SqlConnection( "server.... ecc... la solita stringa") Dim cmd as SqlCommand = new SqlCommand(); cmd.Connection = cn cmd.CommandText = sql cmd.Parameters.AddRange(para) Dim ret as Object = cmd.ExecuteScalar()
if( not ret isNull && not ret = System.DbNull.Value) Server.Transfer( "Default.Aspx") else Server.Transfer( "login.aspx") end if
Direi che così sei anche al sicuro dalla sql injection visto che i parametri sono nominali e controllati saluti Sabry
|
|
| Sabrina |
|
|
 Posts:435
 |
| 21 set 2009 11.20 |
|
Ciao Boss ! e cosa succede se io metto user Pippo e password pluto or 1=1 ??? la query sql non mi diventa: Dim sql as string = "SELECT Login from Tbutenti where Login = Pippo and Password = pluto or 1=1" ??? e' una domanda che mi sono posto... Grazie. Max |
|
|
|
|
 Posts:435
 |
| 21 set 2009 11.24 |
|
Ah, mi sono accorto di 2 cose, essendo ancora in debug il tutto:
1) la query SQL va corretta inserendo anche: and password='{1}' altrimenti a il check solo sul nome
2) bresult=true va tolto. l'ho messo solo per evitare di inserire la password tutte le volte che devo fare il login.
chiedo venia. Max
|
|
|
|
|
 Posts:435
 |
| 21 set 2009 11.27 |
|
Ne ho visto un'altra:
CryptPwd(strPassword, "SHA1")
e' una mia custom function che cripta una stringa di testo:
Public Shared Function CryptPwd(ByVal password As String, ByVal metodo As String) As String If metodo.ToUpper <> "SHA1" And metodo.ToUpper <> "MD5" Then metodo = "SHA1" End If Return FormsAuthentication.HashPasswordForStoringInConfigFile(password, metodo) End Function
Max
|
|
|
|
|
 Posts:811
 |
| 21 set 2009 12.29 |
|
Perché non ci provi dal vero e vedi cosa succede usando il profiler di Windows?
Voglio dire, prova ad usare i parametri e vedi cosa succede con quel tipo di dato di input.
saluti Sabry |
|
| Sabrina |
|
|
 Posts:129
 |
| 21 set 2009 18.32 |
|
Ciao grazie di cuore per la disponibilità... ^__^ Allora, l'utente si registra ed i dati per ora solo nome e password ) vengono inseriti nel database....dovrei creare la select per verificare che, quando l'utente accede, sia effettivamente registrato..quindi... Select nome e password --> se nome e password inseriti dall'utente corrispondono a nome e password selezionati dal DB allora l'utente accede alla pagina altrimenti no.. La mia select non funziona , ma poi stavo pensando come fare per far si che selezioni nome e password di una stessa riga ... non so se mi spiego, i due campi sono legati....mi spiego meglio, io posso anche inserire un nome che esiste nel DB ed una password che esiste nel DB , ma che non stanno sulla stessa riga...vorrei una select che evitasse questo rischio... questo il mio codice ...
Dim cn2 As New SqlConnection()
cn2.ConnectionString = "Data Source=JZONTINI;Initial Catalog=ioscauto;Integrated Security=True"
cn2.Open()
Dim cmd As New SqlCommand()
Dim cmd2 As New SqlCommand
cmd.Connection = cn2
cmd2.Connection = cn2
cmd.CommandText = mSqlselectnome
cmd2.CommandText = mSqlselectPassword
Dim strnome As String
Dim strpass As String
strnome = cmd.CommandText
strpass = cmd2.CommandText
If TB_nome.Text.ToString = strnome Then
If TB_password.Text.ToString = strpass Then
Server.Transfer("Default.aspx")
End If
If TB_password.Text.ToString <> strpass Then
Me.Label3.Text = "errore"
MsgBox("la password non corrisponde al nome", MsgBoxStyle.AbortRetryIgnore)
Server.Transfer("Login.aspx")
End If
End If
cmd.ExecuteNonQuery()
cn2.Close()
e prima della classe pageLoad, cè questo codice:
Private mSqlselectnome As String = vbCr & vbLf & vbTab & vbTab & vbTab & "Select " & vbCr & vbLf & " ([nome]" & vbCr & vbLf & " )" & vbCr & vbLf & "From TabUtente" & vbCr & vbLf & vbTab & vbTab & vbTab
Private mSqlselectPassword As String = vbCr & vbLf & vbTab & vbTab & vbTab & "Select " & vbCr & vbLf & " ([password]" & vbCr & vbLf & " )" & vbCr & vbLf & "From TabUtente" & vbCr & vbLf & vbTab & vbTab & vbTab
|
|
|
|
|
 Posts:129
 |
| 21 set 2009 19.02 |
|
ops scusate , ho visto dopo che c'era una seconda pagina di risposte XD ho risolto con il codice di Sabrina ma....cos'aveva di errato la mia select ? |
|
|
|
|
 Posts:129
 |
| 21 set 2009 19.03 |
|
ah no niente , mi sono risposta da sola .. ma che ritardata che sono !!!! |
|
|
|
|
 Posts:129
 |
| 21 set 2009 19.09 |
|
invece, potresti spiegarmi di preciso cosa fa questa istruzione :
Dim ret As Object = cmd.ExecuteScalar()
If (ret <> 0 & Not ret Is System.DBNull.Value) Then
Server.Transfer("Default.Aspx")
ExecuteScalar ? a cosa serve ? ret è un oggetto ma perchè dev'essere diverso da 0 ? e perchè deve esesre diverso da System.DBNull.Value ? |
|
|
|
|
 Posts:129
 |
| 21 set 2009 20.25 |
|
altro problemino...voglio vedere le foto che il lciente ha inserito...select dalla tabella TabCaratteristiche (quella dove ci sono le auto inserite dal cliente ) ... ho un form dove ho una DropDown per selezionare il modello dell'auto della quale voglio vedere le foto ... ecco il mio codice per veder ele foto..
Imports System
Imports System.Collections
Imports System.Configuration
Imports System.Data
Imports System.Linq
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.HtmlControls
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Xml.Linq
Imports System.Data.SqlClient
Imports System.IO
Imports System.Web.UI.ImageClickEventArgs
Partial Class VediFoto
Inherits System.Web.UI.Page
Private mssqlselect As String = "SELECT foto FROM TabCaratteristiche WHERE modello=@modello"
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim cn As New SqlConnection
cn.ConnectionString = "Data Source=JZONTINI;Initial Catalog=ioscauto;Integrated Security=True"
Dim cmd As New SqlCommand
Dim para2 As SqlParameter() = _
New SqlParameter() { _
New SqlParameter("@modello", Me.DDL_Model.Text)}
cmd.Connection = cn
cn.Open()
cmd.CommandText = mssqlselect
cmd.Parameters.Add(para2)
'Dim ret As Object = cmd.ExecuteScalar()
'If (ret <> 0 & Not ret Is System.DBNull.Value) Then
'Response.Write("Foto")
'Else
'Response.Write("Nessuna foto")
'End If
cmd.ExecuteNonQuery()
cn.Close()
End Sub
End Class
Quando faccio partire il debugger, nemmeno mi apre la pagina ma torna a VS e mi da l'errore sul cmd.parameters.add(para2)..l'errore che mi da è il seguente
SqlParameterCollection accetta solo oggetti di tipo SqlParameter non null, non oggetti SqlParameter[].
però in realtà il campo non è vuoto...io salvo il nome della foto( FileName per capirci ) .. volevo verificare se dal nome riusciva ad aprirmi le foto...per il codice foto , non lo riposto, l'ho postato ieri se non erro  |
|
|
|
|
 Posts:129
 |
| 21 set 2009 20.35 |
|
risolto, anche se non capisco perchè...voglio dire, semplicemente voleva un parameters.AddRange anzichè un parameters.Add....però se il parametro è uno solo, perchè vuole un range di parametri ??
altroa cosa, ho aggiunto un pulsante vicino alla DDL per vedere le foto...ho spostato il codice precedente (corretto ) nell'evento del Button....però non mi fa vedere la foto...non mi da errori, ma non fa nulla..
|
|
|
|
|
 Posts:129
 |
| 21 set 2009 20.55 |
|
ok ...avevo dimenticato un pò di cose...ho fatto questo..
Imports System
Imports System.Collections
Imports System.Configuration
Imports System.Data
Imports System.Linq
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.HtmlControls
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Xml.Linq
Imports System.Data.SqlClient
Imports System.IO
Imports System.Web.UI.ImageClickEventArgs
Partial Class VediFoto
Inherits System.Web.UI.Page
Private mssqlselect As String = "SELECT foto FROM TabCaratteristiche WHERE modello=@modello"
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub B_foto_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles B_foto.Click
Dim cn As New SqlConnection
cn.ConnectionString = "Data Source=JZONTINI;Initial Catalog=ioscauto;Integrated Security=True"
Dim cmd As New SqlCommand
Dim para2 As SqlParameter() = _
New SqlParameter() { _
New SqlParameter("@modello", Me.DDL_Model.Text)}
cmd.Connection = cn
cmd.CommandText = mssqlselect
cmd.Parameters.AddRange(para2)
cn.Open()
cmd.ExecuteNonQuery()
Dim ret As Object = cmd.ExecuteScalar()
If (ret <> 0 & Not ret Is System.DBNull.Value) Then
Dim nomef As String
nomef = mssqlselect.ToString
Drawing.Image.FromFile(nomef)
Else
Response.Write("Nessuna foto")
End If
cn.Close()
End Sub
End Class
<br><br>però mi da questo errore
<br>SELECT foto FROM TabCaratteristiche WHERE modello=@modello Dico già ora che avevo provato a fare un altra select tipo DIm mssqlSelectFoto ="Select foto from Tabfoto" e poi nel codice avevo messo
Dim nomef as string
nomef =mssqlselectFoto.ToString
Drawing.Image.FromFile(nomef)<br><br> però mi da errore lostesso.. |
|
|
|
|
 Posts:435
 |
| 22 set 2009 11.39 |
|
Inserito da jzgrafica su 21 set 2009 20.09
invece, potresti spiegarmi di preciso cosa fa questa istruzione :
Dim ret As Object = cmd.ExecuteScalar()
If (ret <> 0 & Not ret Is System.DBNull.Value) Then Server.Transfer("Default.Aspx")
ExecuteScalar ? a cosa serve ? ret è un oggetto ma perchè dev'essere diverso da 0 ? e perchè deve esesre diverso da System.DBNull.Value ?
Ciao, Questa istruzione ti restituisce un oggetto (generico) di nome "ret" che contiene in realta' una datarow con il risultato della query. ExecuteScalar e' una modalita di esecuzione delle query SQL che in pratica ti restituisce una sola riga (la prima) anziche' una tabella completa. Viene usato perche' e' molto piu' eloce e meno esoso di risorse, ed e' perfetto quando devi eseguire query da cui ti aspetti una sola riga come risultato. (questo articolo ne e' l'esempio perfetto). HTH Max. p.s. non ho capito se hai risolto il problema della password, ma non devi fare 2 query, devi farne 1 con WHERE username = @utente AND password = @password. in questo modo sei sicura che l'intera accoppiata e' corretta. p.p.s hai messo un controllo che lo usernamen on esista gia' quando si registrano, vero ? ;-) |
|
|
|
|
 Posts:129
 |
| 22 set 2009 16.59 |
|
ciao grazie per la spiegazione !! Ho risolto il problema della Login, ma non quello delle foto (vedi due post precedenti ) ... ç___ç sono proprio senza speranza !
|
|
|
|
|
 Posts:129
 |
| 22 set 2009 17.00 |
|
ps: posso inserire un link al vostro sito nel sito del mio cliente ? se si, mi date un banner da inserire ? (Per ora lo inserisco sul sito temporaneo in HTML che è già on-line, poi quando sarà pronto quello in ASP lo inserirò anche li ! ) |
|
|
|
|
 Posts:811
 |
| 22 set 2009 17.33 |
|
Se usi Parameters.AddRange gli passi un array di parametri, se usi Parameters.Add devi passargli un solo parametro alla volta pertanto per usare Add invece di
dim para as SqlParameter() = new Sqlparameter() {
new SqlParameter( "@uno", "valore1"),
New SqlParameter("@Due", "valore2") }
Devi fare
dim para as new SqlParameter( "@singolo", "valore")
allora l'add ti funziona.
|
|
| Sabrina |
|
|
 Posts:811
 |
| 22 set 2009 17.41 |
|
Il problema della foto credo che sia un problema di tipo filosofico esistenziale, perché vuoi estrarre la foto dal file? In ASP usualmente basta dare all'elemento SRC del controllo il link all'immagine x ottenere la sua visualizzazione.
Non so che controllo usi x le immagini, però guarda qual'è l'attributo relativo all'immagine e se dalla tua select ricevi qualcosa del tipo:
"immagini\nomeimmagine.jpg" devi solo convertirla in un path relativo al server che la trasformerà in qualcosa del tipo
http://www.miosito.it/immagini/nomeimmagine.jpg"
oppure
"immagini/nomeimmagine.jpg"
credo l'istruzione sia Server.mappath("immagini\miaimmagine.jpg") o forse questo è il contrario??? non ricordo, MAX pensaci TUUU ciao Sabry |
|
| Sabrina |
|
|
 Posts:129
 |
| 22 set 2009 19.06 |
|
ora rifaccio altrimenti impazzisco...allora, nella pagina dove il cliente inserisce le auto, può inesrire anche le foto ( così poi i suoi clienti potranno vederle, per questo voglio che siano visualizzabili ) ...
il codice per salvare le foto in un determinato percorso è il seguente:
If Not FU_foto.HasFile = False Then
Dim filepath As String = FU_foto.PostedFile.FileName
Dim pat As String = "\\(?:.+)\\(.+)\.(.+)"
Dim r As Regex = New Regex(pat)
'run
Dim m As Match = r.Match(filepath)
Dim file_ext As String = m.Groups(2).Captures(0).ToString()
Dim filename As String = m.Groups(1).Captures(0).ToString()
Dim filefoto As String = filename & "." & file_ext
'save the file to the server
FU_foto.PostedFile.SaveAs(Server.MapPath(".\") & filefoto)
lblstatus.Text = "File Saved to: " & Server.MapPath(".\") & filefotoE non comprendo questa regexp... ero abituata a php e con php si usano regexp comuni per altre cose.. Comunque, li c'è il codice per salvare le foto in un percorso e , poi, nell'istruzione sql, la foto viene salvata con il proprio nome quindi non con il percorso ) ... Io devo creare una pagina nella quale il cliente del mio cliente selezionerà l'auto da una DDL, cliccherà su un pulsante vedi foto e visualizzerà la foto in questione ( quindi la foto dell'auto che ha selezionato ) .. per ora lo faccio in una pagina separata dal resto, poi quando avrò capito come si fa    il pulsante "vedi foto" comparirà a fianco di ogni auto inserita dal mio cliente ( in una pagina dove verranno visualizzate tutte le sue auto, sempre con selezione DDL da parte dei suoi clienti ) IO STO DIVENTANDO SCEMA -.-' |
|
|
|
|
 Posts:129
 |
| 22 set 2009 19.11 |
|
Si, praticamente me lo state facendo voi il sito per il cliente !! Se mi paga ed è contento, vi farò una donazione del 20% giuro !!! Non so come avrei fatto senza di voi ! Prima di trovare voi avevo chiesto in 50000 forum ma nessuno mi ha mai risposto !! VI ADORO !!!!!!!!! siete troppo cortesi !! E la frase di cui sopra non era per scherzare! ( magari un pò meno del 20 % XD però vi farò sicuramente una donazioen ! ) |
|
|
|
|
| Non sei autorizzato ad inviare una risposta. |
|
Active Forums 4.1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Assembly Strong Named |
 |
Firma digitale degli Assembly, uso e funzionalità |
 |
|
2007/08/05 | Autore: Sabrina Cosolo
|
|
|
|