anche se funziona non credo sia la soluzione migliore.
Il codice di sotto è in Basic e tratta database Access ed è solo per esempio, non è per "copia e incolla"
Suppongo di avere un controllo server di tipo TextBox
codice:
<asp:TextBox ID="c_testo" runat="server" MaxLength="50" ></asp:TextBox>
è obbligato quindi metto un validatore:
codice:
<asp:RequiredFieldValidator ID="rfv_testo" runat="server" ControlToValidate="c_testo" ErrorMessage="Il campo testo è obbligato" ToolTip="Il campo testo è obbligato" Text="*" CssClass="text_error help"></asp:RequiredFieldValidator>
ho un pulsante (o link) "salva" che, nell'evento click lancia il metodo updateData
codice:
Private Sub updateData()
Dim Connessione As o.OleDbConnection = Nothing
Dim Comando As o.OleDbCommand = Nothing
Dim Transazione As o.OleDbTransaction = Nothing
Dim Sql As String = "UPDATE [CAMPI] SET [TESTO] = ? WHERE [ID] = ? "
Try
Dim id As Integer = Me.id
Dim testo As String = Me.c_testo.Text
Connessione = New o.OleDbConnection(gl.StringaConnessioneTest)
Connessione.Open()
Transazione = Connessione.BeginTransaction()
Comando = Connessione.CreateCommand()
Comando.Transaction = Transazione
Comando.CommandText = Sql
Comando.Parameters.Clear()
Comando.Parameters.Add(msole.createParameterVarChar("testo", 50, l.StringNullToDBNull(testo)))
Comando.Parameters.Add("id", OleDbType.Integer).Value = id
Comando.ExecuteNonQuery()
'Transazione.Rollback()
Transazione.Commit()
Dim messaggio As String = "Dati immessi con successo."
If Not EIE9oSuperioreOAltri() Then
l.addLoadEventClient(Me, String.Format("if(self.aggiorna_chiamante){{aggiorna_chiamante();}};", ""))
l.MsgBox(Me, messaggio)
Else
l.MsgBox(Me, messaggio)
l.addLoadEventClient(Me, String.Format("if(self.aggiorna_chiamante){{aggiorna_chiamante();}};", ""))
End If
Catch ex As Exception
If (Not (Transazione Is Nothing) AndAlso Not (Transazione.Connection Is Nothing)) Then Transazione.Rollback()
Throw
Finally
If Not (Connessione Is Nothing) Then Connessione.Close()
End Try
End Sub
come vedi, si recupera i dati in modo diretto tipo:
Dim testo As String = Me.c_testo.Text
poi non creo la stringa sql, ma uso i parametri (elimini così DEFINITIVAMENTE i problemi dei caratteri "strani" e altro...)
uso le transazione: se debbo aggiornare più tabelle ed un aggiornamento non va a buon fine, faccio il Rollback.
Chiudo SEMPRE le connessioni nel blocco Finally.
Il recupero dei dati con Request.Form la fai solo in determinate situazioni, quando non si può fare altrimenti.

ps. nota che l.StringNullToDBNull(testo) non è altro che un metodo che restituisce dbNull.value se testo è vuoto, altrimenti restituisce testo, così ti metti al riparo dai campi vuoti.