Tengo una aplicación de carrito de compras. AL ir a insrtar el pedido, lo que hago es instertar primero el pedido en la tabla pedidos(IdPedido,Fecha, Estado, Direccion,Precio y Usuario). Una vez insertado, obtengo el IdPedido para insertar los artícuos en la tabla ArticulosPedido( IdPedido, IdArticulo,Cantdiad).
EL problema es que al trabajar en local, apuntando a la BBDD Mysql del hosting, eso sí, funciona todo perfecto, pero al subir el proyecto al hosting, falla la inserción de los artículos. Es como si no hubiese insertado el pedido antes de intentar obtener el id del pedido para insertar los artículos.
El caso es que no se como hacer para que pimero, inserte el pedido, y una vez que, seguro al 100% se haya insertado, proceder a insertar los artículos.
Os dejo el código:
Código vb:
Ver original
Protected Sub BotonConfirmarPedido_Click(ByVal sender As Object, ByVal e As System.EventArgs) 'Handles BotonConfirmarPedido.Click Dim Id_Usuario As Integer Dim Precio As Decimal Dim DireccionEnvio As String Dim cadenaconexion As String Dim conexion As New MySqlConnection ' Lista comandos(InsercionPedidos, Direccion, Id_Pedido, InsercionPed_Art) Dim comandopedido As New MySqlCommand Dim comandopedido2 As New MySqlCommand Dim comandopedido3 As New MySqlCommand Dim comandopedido4 As New MySqlCommand Dim OrdenSqlpedido As String Dim OrdenSqlDirec As String Dim OrdenSqlArtPed As String Dim OrdenSqlIdPedido As String Dim Cantidad As Integer Dim Id_Articulo As Integer Dim Id_Pedido As Integer Id_Usuario = Session("IdUsuario") Precio = Session("TotalCarro") cadenaconexion = "sdasdasdasdasdasdasdasd" conexion.ConnectionString = cadenaconexion OrdenSqlpedido = "INSERT INTO pedidos(Fecha_Pedido,Estado_Pedido,Precio,Direccion_Envio,Usuario) VALUES (?Fecha,?Estado,?Precio,?Direc,?Usuario)" OrdenSqlDirec = "SELECT Direccion FROM usuarios WHERE IdUsuario ='" & Id_Usuario & "'" OrdenSqlIdPedido = "SELECT IdPedido FROM pedidos WHERE Usuario ='" & Id_Usuario & "' and Precio ='" & Precio & "'" comandopedido.Connection = conexion comandopedido.CommandType = CommandType.Text comandopedido.CommandText = OrdenSqlpedido comandopedido2.Connection = conexion comandopedido2.CommandType = CommandType.Text comandopedido2.CommandText = OrdenSqlDirec comandopedido3.Connection = conexion comandopedido3.CommandType = CommandType.Text comandopedido3.CommandText = OrdenSqlIdPedido Try ' Obtenemos la direccion del usuario conexion.Open() DireccionEnvio = comandopedido2.ExecuteScalar() conexion.Close() ' Agregamos los parámetros comandopedido.Parameters.Add(New MySqlParameter("?Fecha", MySqlDbType.Date, 10)).Value = System.DateTime.Today comandopedido.Parameters.Add(New MySqlParameter("?Estado", MySqlDbType.VarChar, 10)).Value = "Recibido" comandopedido.Parameters.Add(New MySqlParameter("?Precio", MySqlDbType.Decimal, 10)).Value = Precio comandopedido.Parameters.Add(New MySqlParameter("?Direc", MySqlDbType.VarChar, 45)).Value = DireccionEnvio comandopedido.Parameters.Add(New MySqlParameter("?Usuario", MySqlDbType.Int32, 10)).Value = Id_Usuario ' Insertamos el pedido en la tabla pedidos conexion.Open() comandopedido.ExecuteNonQuery() conexion.Close() conexion.Dispose() Catch ex As Exception Label1.Text = ex.Message End Try Try 'Procedemos a insertar los articulos del carro 'Obtenemos el Id del Pedido conexion.Open() Id_Pedido = comandopedido3.ExecuteScalar() conexion.Close() With GridViewValidar For i As Integer = 0 To (GridViewValidar.Rows.Count - 1) Cantidad = CInt(GridViewValidar.Rows(i).Cells(1).Text) GridViewValidar.Columns(0).Visible = True Id_Articulo = CInt(GridViewValidar.Rows(i).Cells(0).Text) GridViewValidar.Columns(0).Visible = False ' Agregamos los parámetros OrdenSqlArtPed = "INSERT INTO listaarticulos(RefPedido,RefArticulo,Cantidad) VALUES ('" & Id_Pedido & "','" & Id_Articulo & "' , '" & Cantidad & "'); Commit;" ' Creamos el comando comandopedido4.Connection = conexion comandopedido4.CommandType = CommandType.Text comandopedido4.CommandText = OrdenSqlArtPed 'Ejecutamos la inserción de la tupla conexion.Open() comandopedido4.ExecuteNonQuery() conexion.Close() Next End With 'Response.Redirect("CompraFinalizada.aspx") Catch ex As Exception Label1.Text = ex.Message End Try conexion.Close() conexion.Dispose() End Sub
Gracias por la ayuda ^^