Pues tengo un par de dudas... bueno son mas jejeje
Estoy desarrollando una aplicacion para mi trabajo, VB .net + MySQL con el motor de almacenamiento InnoDB, para poder hacer uso de transacciones y otras cosas.
En primer lugar, quiero manejar lo que son stored procedures, solo que me quede estancado a la hora de usar transacciones, ya que no se como hacer uso de las excepciones en MySQL (que al momento de que no pueda insertar un registro a una tabla por X motivo, me haga el rollback). Aqui les pongo parte de mi codigo:
En VB llamo a una funcion la cual ejecuta mi codigo MySQL:
Código:
Funcion ejecutaEjecuta("call ProcInsCta('" & numcta & "','" & txtnombre.Text & "','" & tcuenta & "','" & ctamayor & "','" & fechacuenta & "','" & clase & "','" & subcuenta & "')")
Código:
Hasta ahi, al parecer todo bien... igual tendria que modificar la funcion. Eso ustedes me lo podrian sugerir.Public Sub Ejecuta(ByVal sComando As String) Dim commmySQL As MySqlCommand Try commmySQL = New MySqlCommand(sComando, cn) commmySQL.ExecuteNonQuery() Catch e As MySqlException MessageBox.Show("No se puede llevar a cabo la operación. Detalle del error: " & e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop) merr = True Finally End Try End Sub
En mi BD tengo un stored procedure llamado ProcInsCta:
Código:
CREATE DEFINER=`root`@`localhost` PROCEDURE `ProcInsCta`(numcta char(9),nombcta varchar(90),tcuenta char(1),ctamayor char(1),fechacuenta char(10),clase char(1), subcta char(9)) BEGIN declare numerocta char(9); declare subctade char(9); select cuenta from `cont-cuenta` into numerocta where `cuenta`=numcta; #me marca error aqui... no se porque :S if numerocta <> NULL then return 'La cuenta que intenta agregar ya existe'; #mi idea aqui es que regrese este mensaje y se despliegue en mi messagebox... alguien sabe como lo podria hacer? else select cuenta from `cont-cuenta` into subctade where `cuenta`=subcta; if subcta = NULL then return 'El numero de la cuenta superior no existe';#mi idea aqui es que regrese este mensaje y se despliegue en mi messagebox... alguien sabe como lo podria hacer? else else set autocommit=0; start transaction WITH CONSISTENT SNAPSHOT; insert into `cont-cuenta` (cuenta,nombre,tipo,mayor,fechalta,clase) values (numcta,nombcta,tcuenta,ctamayor,fechacuenta,clase); if #en este if, la idea es que recupere el mensaje de la consulta anterior, si hay error haga el rollback, sino, que se pase al else para hacer commit rollback; else commit; end if if ctamayor<>'3' then insert into `cont-ctasoc` (ctasup,subcta) values (numcta,subcta); end if; end if; end if; END
Mas que nada quisiera saber si la sintaxis de mi procedimiento esta bien, como manejo los errores en MySQL, si la sintaxis del uso de transacciones esta bien y si me hace falta algo mas para que funcione mejor.
Se daran cuenta que la aplicacion esta en Windows. El servidor de MySQL corre en Windows 2003 Server, la aplicacion la estoy programando en VB.net 2005 en Windows XP.
Saludos y espero sus comentarios :D