studio - Obteniendo la clave principal después de una inserción en asp.net(visual basic)
crear aplicaciones web asp.net(visual c#) (5)
Creo que una consulta parametrizada se vería así:
Dim pathString As String = HttpContext.Current.Request.MapPath("Banking.mdb")
Dim odbconBanking As New OleDbConnection _
("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" + pathString)
Dim sql As String
sql = "INSERT INTO tblUsers ( FirstName, LastName, Address, City, Province, Zip, Phone, UserName, [Password])" & _
" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
odbconBanking.Open()
Dim cmd As New OleDbCommand(sql, odbconBanking)
//Add Params here
cmd.Parameters.Add(new OdbcParameter("@FirstName", firstName))
cmd.Parameters.Add(new OdbcParameter("@LastName", lastName))
//..etc
//End add Params here
cmd.ExecuteNonQuery()
Dim newcmd As New OleDbCommand("SELECT @@IDENTITY", odbconBanking)
uid = newcmd.ExecuteScalar
odbconBanking.Close()
Mi sintaxis puede estar un poco desajustada ya que estoy más acostumbrado a usar la biblioteca del servidor Sql y no la biblioteca Odbc, pero eso debería ayudarlo a comenzar.
Estoy agregando un registro como este:
Dim pathString As String = HttpContext.Current.Request.MapPath("Banking.mdb")
Dim odbconBanking As New OleDbConnection _
("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" + pathString)
Dim sql As String
sql = "INSERT INTO tblUsers ( FirstName, LastName, Address, City, Province, Zip, Phone, UserName, [Password])" & _
" VALUES (''" & firstName & "'', ''" & lastName & "'', ''" & address & _
"'', ''" & city & "'', ''" & province & "'', ''" & zip & "'', ''" & phone & "'', ''" & username & "'', ''" & password & "'');"
odbconBanking.Open()
Dim cmd As New OleDbCommand(sql, odbconBanking)
cmd.ExecuteNonQuery()
odbconBanking.Close()
La clave principal es un campo de autonumeración llamado ID de usuario. Entonces, ¿cómo obtengo la clave principal del registro que acabo de insertar?
Gracias.
La forma más simple sería generar su valor uniqueIdentifier en el nivel de código, agregarlo a su cadena y enviarlo al servidor.
Dim sql As String, _
myNewUserId as variant
myNewUserId = stGuidGen ''this function will generate a new GUID value)''
sql = "INSERT INTO tblUsers ( userId, LastName)" & _
" VALUES (''" & myNewUserId & "'',''" & LastName);"
Puede consultar aquí una propuesta para el código de generación guid de stGuidGen .
Esta técnica del lado del cliente es clara, limpia y útil
Lo tengo. Así es como se ve el código anterior:
Dim pathString As String = HttpContext.Current.Request.MapPath("Banking.mdb")
Dim odbconBanking As New OleDbConnection _
("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" + pathString)
Dim sql As String
sql = "INSERT INTO tblUsers ( FirstName, LastName, Address, City, Province, Zip, Phone, UserName, [Password])" & _
" VALUES (''" & firstName & "'', ''" & lastName & "'', ''" & address & _
"'', ''" & city & "'', ''" & province & "'', ''" & zip & "'', ''" & phone & "'', ''" & username & "'', ''" & password & "'');"
odbconBanking.Open()
Dim cmd As New OleDbCommand(sql, odbconBanking)
cmd.ExecuteNonQuery()
Dim newcmd As New OleDbCommand("SELECT @@IDENTITY", odbconBanking)
uid = newcmd.ExecuteScalar
odbconBanking.Close()
Querrá agregar
;select scope_identity();
después de su consulta, y ejecute executeScalar para recuperar el valor.
Además, en una nota sin relación alguna, debería cambiar el código para usar consultas parametrizadas, de modo que no quede atrapado con ataques de inyección de SQL, o bloqueos debido a cadenas escapadas incorrectamente concatenadas en su instrucción sql.
"SELECT @@IDENTITY"
justo después de la inserción debería funcionar con el proveedor de Microsoft.Jet.