Foros del Web » Programando para Internet » ASPX (.net) »

Problema con varias sentencias SQL

Estas en el tema de Problema con varias sentencias SQL en el foro de ASPX (.net) en Foros del Web. Hola, no se si esta pregunta va a quí o en el apartado de BBDD. La pongo aquí ya que es donde creo que encaja ...
  #1 (permalink)  
Antiguo 11/02/2010, 04:51
 
Fecha de Ingreso: noviembre-2009
Mensajes: 44
Antigüedad: 14 años, 5 meses
Puntos: 0
Problema con varias sentencias SQL

Hola, no se si esta pregunta va a quí o en el apartado de BBDD. La pongo aquí ya que es donde creo que encaja mejor.

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
  1. Protected Sub BotonConfirmarPedido_Click(ByVal sender As Object, ByVal e As System.EventArgs) 'Handles BotonConfirmarPedido.Click
  2.  
  3.         Dim Id_Usuario As Integer
  4.  
  5.         Dim Precio As Decimal
  6.         Dim DireccionEnvio As String
  7.  
  8.         Dim cadenaconexion As String
  9.         Dim conexion As New MySqlConnection
  10.         ' Lista comandos(InsercionPedidos, Direccion, Id_Pedido, InsercionPed_Art)
  11.        Dim comandopedido As New MySqlCommand
  12.         Dim comandopedido2 As New MySqlCommand
  13.         Dim comandopedido3 As New MySqlCommand
  14.         Dim comandopedido4 As New MySqlCommand
  15.  
  16.         Dim OrdenSqlpedido As String
  17.         Dim OrdenSqlDirec As String
  18.         Dim OrdenSqlArtPed As String
  19.         Dim OrdenSqlIdPedido As String
  20.  
  21.  
  22.         Dim Cantidad As Integer
  23.         Dim Id_Articulo As Integer
  24.         Dim Id_Pedido As Integer
  25.  
  26.  
  27.  
  28.  
  29.  
  30.         Id_Usuario = Session("IdUsuario")
  31.         Precio = Session("TotalCarro")
  32.  
  33.         cadenaconexion = "sdasdasdasdasdasdasdasd"
  34.         conexion.ConnectionString = cadenaconexion
  35.         OrdenSqlpedido = "INSERT INTO pedidos(Fecha_Pedido,Estado_Pedido,Precio,Direccion_Envio,Usuario) VALUES (?Fecha,?Estado,?Precio,?Direc,?Usuario)"
  36.         OrdenSqlDirec = "SELECT Direccion FROM usuarios WHERE IdUsuario ='" & Id_Usuario & "'"
  37.         OrdenSqlIdPedido = "SELECT IdPedido FROM pedidos WHERE Usuario ='" & Id_Usuario & "'  and Precio ='" & Precio & "'"
  38.  
  39.  
  40.  
  41.         comandopedido.Connection = conexion
  42.         comandopedido.CommandType = CommandType.Text
  43.         comandopedido.CommandText = OrdenSqlpedido
  44.  
  45.         comandopedido2.Connection = conexion
  46.         comandopedido2.CommandType = CommandType.Text
  47.         comandopedido2.CommandText = OrdenSqlDirec
  48.  
  49.         comandopedido3.Connection = conexion
  50.         comandopedido3.CommandType = CommandType.Text
  51.         comandopedido3.CommandText = OrdenSqlIdPedido
  52.  
  53.  
  54.  
  55.  
  56.         Try
  57.  
  58.             ' Obtenemos la direccion del usuario
  59.            conexion.Open()
  60.             DireccionEnvio = comandopedido2.ExecuteScalar()
  61.             conexion.Close()
  62.  
  63.             ' Agregamos los parámetros
  64.            comandopedido.Parameters.Add(New MySqlParameter("?Fecha", MySqlDbType.Date, 10)).Value = System.DateTime.Today
  65.             comandopedido.Parameters.Add(New MySqlParameter("?Estado", MySqlDbType.VarChar, 10)).Value = "Recibido"
  66.             comandopedido.Parameters.Add(New MySqlParameter("?Precio", MySqlDbType.Decimal, 10)).Value = Precio
  67.             comandopedido.Parameters.Add(New MySqlParameter("?Direc", MySqlDbType.VarChar, 45)).Value = DireccionEnvio
  68.             comandopedido.Parameters.Add(New MySqlParameter("?Usuario", MySqlDbType.Int32, 10)).Value = Id_Usuario
  69.  
  70.             ' Insertamos el pedido en la tabla pedidos
  71.            conexion.Open()
  72.             comandopedido.ExecuteNonQuery()
  73.             conexion.Close()
  74.             conexion.Dispose()
  75.  
  76.  
  77.         Catch ex As Exception
  78.             Label1.Text = ex.Message
  79.         End Try
  80.  
  81.         Try
  82.  
  83.             'Procedemos a insertar los articulos del carro
  84.  
  85.             'Obtenemos el Id del Pedido
  86.            conexion.Open()
  87.             Id_Pedido = comandopedido3.ExecuteScalar()
  88.             conexion.Close()
  89.  
  90.             With GridViewValidar
  91.  
  92.                 For i As Integer = 0 To (GridViewValidar.Rows.Count - 1)
  93.  
  94.                     Cantidad = CInt(GridViewValidar.Rows(i).Cells(1).Text)
  95.                     GridViewValidar.Columns(0).Visible = True
  96.  
  97.                     Id_Articulo = CInt(GridViewValidar.Rows(i).Cells(0).Text)
  98.                     GridViewValidar.Columns(0).Visible = False
  99.                     ' Agregamos los parámetros
  100.  
  101.                     OrdenSqlArtPed = "INSERT INTO listaarticulos(RefPedido,RefArticulo,Cantidad) VALUES ('" & Id_Pedido & "','" & Id_Articulo & "' , '" & Cantidad & "'); Commit;"
  102.                    
  103.  
  104.                     ' Creamos el comando
  105.                    comandopedido4.Connection = conexion
  106.                     comandopedido4.CommandType = CommandType.Text
  107.                     comandopedido4.CommandText = OrdenSqlArtPed
  108.  
  109.                     'Ejecutamos la inserción de la tupla
  110.                    conexion.Open()
  111.                     comandopedido4.ExecuteNonQuery()
  112.                     conexion.Close()
  113.  
  114.  
  115.                 Next
  116.             End With
  117.             'Response.Redirect("CompraFinalizada.aspx")
  118.        Catch ex As Exception
  119.             Label1.Text = ex.Message
  120.         End Try
  121.         conexion.Close()
  122.         conexion.Dispose()
  123.  
  124.     End Sub

Gracias por la ayuda ^^

Última edición por Eloytxo; 11/03/2010 a las 05:04
  #2 (permalink)  
Antiguo 12/02/2010, 03:11
 
Fecha de Ingreso: noviembre-2009
Mensajes: 44
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Problema con varias sentencias SQL

A nadie se le ocurre por qué puede fallar?
  #3 (permalink)  
Antiguo 12/02/2010, 04:53
 
Fecha de Ingreso: enero-2010
Ubicación: Sevilla
Mensajes: 202
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: Problema con varias sentencias SQL

Aunque tengo mis dudas sobre lo que preguntas, me parece que el problema podría venir de la forma en que intentas obtener el id_pedido.
Intentas buscarlo por IdUsuario y precio, pero se podría dar el caso de varios registros que cumplieran esa condición.

Mi consejo:

1.- Intenta hacer todas las operaciones en un procedimiento almacenado y luego lo llamas desde el formulario.
2.- Intenta hacer una programación en capas, no poniendo todo el código detrás del botón, entre otras cosas, porque el mantenimiento se vuelve una pesadilla. Imagina que cambiad de servidor de BD, por ejemplo, eso te obligaría a recorrer toda la aplicación para cambiar TODAS las cadenas de conexión.

Espero que te sea de ayuda.

Programación en capas:
http://www.elguille.info/colabora/puntoNET/jevergara_Multitier.htm
http://jmhogua.blogspot.com/2007/01/programacin-en-capas-primera-parte-capa.html
http://www.slideshare.net/Decimo/arquitectura-3-capas
  #4 (permalink)  
Antiguo 12/02/2010, 11:49
 
Fecha de Ingreso: noviembre-2009
Mensajes: 44
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Problema con varias sentencias SQL

Gracias Teo. Una vez que consiga hace funcionar la aplicación correctamente, la segunda fase del desarrollo es mejorar aspectos de las interfaces y de la implementación, así que lo de la programación por cpas lo tendré muy en cuenta.

Sobre mi duda, lo he solucionado obteniendo el Max(IdPedido) en una funcion para agregar los articulos. Supongo que fallaría por tiempo. A lo mejor no le daba tiempo a guardar el pedido cuando quería coger el id... a saber.
  #5 (permalink)  
Antiguo 16/02/2010, 01:21
 
Fecha de Ingreso: enero-2006
Mensajes: 293
Antigüedad: 18 años, 3 meses
Puntos: 4
Respuesta: Problema con varias sentencias SQL

Consejo: cuando publiques código en internet, no pegues la información de tu servidor... ip, usuario, password.. etc... :)



saludos
  #6 (permalink)  
Antiguo 11/03/2010, 05:05
 
Fecha de Ingreso: noviembre-2009
Mensajes: 44
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Problema con varias sentencias SQL

Cita:
Iniciado por osvier Ver Mensaje
Consejo: cuando publiques código en internet, no pegues la información de tu servidor... ip, usuario, password.. etc... :)



saludos
Buah, ke gran fallo. Pensaba que estaba mostrando el que tenía en Local.

Gracias por el aviso.

Etiquetas: sentencias, sql, aspx
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:15.