Hola, estoy haciendo un programa que cambia contraseñas, pero por alguna extraña razón el UPDATE no me funciona D:, VB.NET 2010
conn.Open()
cmd = New OleDb.OleDbCommand("UPDATE USUARIOS SET PASSWORD = @PASS WHERE USUARIO = @USER", conn)
cmd.Parameters.AddWithValue("@USER", usuario)
cmd.Parameters.AddWithValue("@PASS", password)
cmd.ExecuteNonQuery()
conn.Close()
ERROR = "Error de sintaxis en la instrucción UPDATE.".
Lo he cambiado sin parámetros y con parámetros, no se que será. Gracias por su ayuda y por leerme
Intenta quitando los "@" de "AddWithValue".
conn.Open()
cmd = New OleDb.OleDbCommand("UPDATE USUARIOS SET PASSWORD = @PASS WHERE USUARIO = @USER", conn)
cmd.Parameters.AddWithValue("USER", usuario)
cmd.Parameters.AddWithValue("PASS", password)
cmd.ExecuteNonQuery()
Gracias por responder ;D
Lo intentaré y mañana te reporto que tal me fue!!, gracias.
conn.Open()
cmd = New OleDb.OleDbCommand("UPDATE USUARIOS SET PASSWORD = @PASS WHERE USUARIO = @USER", conn)
cmd.Parameters.AddWithValue("USER", usuario)
cmd.Parameters.AddWithValue("PASS", password)
cmd.ExecuteNonQuery()
conn.Close()
Me sigue dando el mismo error, también utilicé este código y nada :(
conn.Open()
cmd = New OleDb.OleDbCommand("UPDATE USUARIOS SET PASSWORD = '" & password & "' WHERE USUARIO = '" & usuario & "'".Replace(".", ""), conn)
cmd.ExecuteNonQuery()
conn.Close()
Lo extraño es que esos campos son texto en el motor, y tengo esos mismos comandos y me funcionan bien en otras aplicaciones, sinceramente me quedo corto porque es un error muy extraño.
Imports System.Data.SqlClient
Imports System.Data.OleDb
Esas son las librería que uso, nada fuera de lo normal.
PD: Ya lo intenté usando también sin el replace por si era algún caracter o algo pero nada.
Prueba con SqlCLient:
Dim sql As String = "UPDATE USUARIOS SET PASSWORD = @PASS WHERE USUARIO = @USER"
Dim conexion As New Data.SqlClient.SqlConnection(miStringConeccion)
Dim comando As New Data.SqlClient.SqlCommand(sql, conexion)
try
conexion .Open()
comando.Parameters.AddWithValue("USER", usuario)
comando.Parameters.AddWithValue("PASS", password)
comando.ExecuteNonQuery()
conexion .Close()
Catch ex As Exception
'ERROR
Throw New Exception("Asi quedo la consulta y fue error: " & comando.CommandText & " ---> " & ex.Message().ToString)
conexion.Close()
End Try
Recuerda establecer miStringConeccion.
Lo otro puede ser, que en tus variables usuario y/o password, estes pasando algun dato malo. SI te da error este codigo, postea la excepcion.
System.Exception was unhandled
HResult=-2146233088
Message=Asi quedo la consulta y fue error: UPDATE USUARIOS SET PASSWORD = 's' WHERE USUARIO = 'Admin' ---> Error de sintaxis en la instrucción UPDATE.
Source=CUENTAS
StackTrace:
at CUENTAS.frmCambiar.CambiarPassword(String usuario, String password) in W:\Desarrollo\Cuentas\CUENTAS\CUENTAS\frmCambiar.vb:line 84
at CUENTAS.frmCambiar.btnCambio_Click(Object sender, EventArgs e) in W:\Desarrollo\Cuentas\CUENTAS\CUENTAS\frmCambiar.vb:line 15
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(ApplicationContext context)
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
at CUENTAS.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
Eso es lo que me tira :(
Cual es tu estructura de tablas? Postea el codigo SQL.
Especifica que Motor de BD usas, y el nombre de tu esquema.
ID_USUARIO = Autonumérico(Entero Largo)
USUARIO= Texto(80)
PASSWORD = Texto(16)
TIPO = Texto(10)
Motor de datos = Access 2007, Provider=Microsoft.ACE.OLEDB.12.0, Jet OLEDB
No tiene relaciones, es algo extremedamente simple para que no funcione :(.
Con respecto a lo que le entra ya revisé con el depurador usando datos MUY SIMPLES tales como una "s" o s y 1234, es algo demasiado sencillo y no comprendo.
cmd = New OleDb.OleDbCommand("UPDATE [USUARIOS] SET [PASSWORD] = '" & password & "' WHERE [USUARIO] = '" & usuario & "'", conn)
Ya pude, no se como carajos sirve, pero sirvió, sinceramente no le veo lógica, porque esto nunca lo había configurado ni tocado. Gracias por responderme y leerme!.