none
procedimiento almacenado que no funciona bien RRS feed

  • Pregunta

  • Hola:

    Tengo un objectdatasource

     <asp:ObjectDataSource ID="objdsdivisas" TypeName="comercial.divisas" SelectCountMethod="seleccionar_cuenta" EnablePaging="true" SelectMethod="seleccionar_todo" UpdateMethod="actualizar_todo" DeleteMethod="quitar_todo" StartRowIndexParameterName="comienzo" MaximumRowsParameterName="maximonumeroregistros" SortParameterName="orden" runat="server" >
            <UpdateParameters>
                <asp:Parameter Name="cotizacion" Type="Decimal" />
            </UpdateParameters>
            <SelectParameters>
                <asp:Parameter Name="condicion" DefaultValue=" "  />
            </SelectParameters>
        </asp:ObjectDataSource>


    Los objetos comerciales son

    Imports System
    Imports System.Configuration
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Collections.Generic
    Imports System.Web.UI
    Imports System.Web.UI.WebControls
    
    Namespace comercial
    
        Public Class divisas
    
            Public Function seleccionar_todo(ByVal orden As String, ByVal comienzo As Integer, ByVal maximonumeroregistros As Integer, ByVal condicion As String) As DataSet
                Dim cnconexion As New SqlConnection(ConfigurationManager.ConnectionStrings("Comun").ConnectionString)
                Dim sqlc As New SqlCommand("seleccionar_divisas", cnconexion)
                Dim da As SqlDataAdapter = New SqlDataAdapter(sqlc), ds As DataSet = New DataSet()
                sqlc.CommandType = CommandType.StoredProcedure
                sqlc.Parameters.AddWithValue("@orden", orden)
                sqlc.Parameters.AddWithValue("@comienzo", comienzo)
                sqlc.Parameters.AddWithValue("@maximonumeroregistros", maximonumeroregistros)
                sqlc.Parameters.AddWithValue("@condicion", condicion)
                cnconexion.Open()
                da.Fill(ds)
                cnconexion.Close()
                Return ds
            End Function
    
            Public Function seleccionar_cuenta(ByVal condicion As String) As Integer
                Dim cnconexion As New SqlConnection(ConfigurationManager.ConnectionStrings("Comun").ConnectionString)
                Dim sqlc As New SqlCommand("seleccionar_numeroregistros_divisas", cnconexion)
                Dim intnumeroregistros As Integer
                sqlc.CommandType = CommandType.StoredProcedure
                sqlc.Parameters.AddWithValue("@condicion", condicion)
                cnconexion.Open()
                intnumeroregistros = CInt(sqlc.ExecuteScalar())
                cnconexion.Close()
                Return intnumeroregistros
            End Function
    
            Public Function actualizar_todo(ByVal id0 As Integer, ByVal divisa_singular_espanol As String, ByVal divisa_singular_ingles As String, ByVal divisa_singular_frances As String, ByVal divisa_singular_portugues As String, ByVal divisa_plural_espanol As String, ByVal divisa_plural_ingles As String, ByVal divisa_plural_frances As String, ByVal divisa_plural_portugues As String, ByVal simbolo As String, ByVal cotizacion As Decimal) As Integer
                Dim cnconexion As New SqlConnection(ConfigurationManager.ConnectionStrings("Comun").ConnectionString)
                Dim sqlc As New SqlCommand("actualizar_divisas", cnconexion)
                Dim intregistros As Integer
                sqlc.CommandType = CommandType.StoredProcedure
                sqlc.Parameters.AddWithValue("@id0", id0)
                sqlc.Parameters.AddWithValue("@divisa_singular_espanol", divisa_singular_espanol)
                sqlc.Parameters.AddWithValue("@divisa_singular_ingles", divisa_singular_ingles)
                sqlc.Parameters.AddWithValue("@divisa_singular_frances", divisa_singular_frances)
                sqlc.Parameters.AddWithValue("@divisa_singular_portugues", divisa_singular_portugues)
                sqlc.Parameters.AddWithValue("@divisa_plural_espanol", divisa_plural_espanol)
                sqlc.Parameters.AddWithValue("@divisa_plural_ingles", divisa_plural_ingles)
                sqlc.Parameters.AddWithValue("@divisa_plural_frances", divisa_plural_frances)
                sqlc.Parameters.AddWithValue("@divisa_plural_portugues", divisa_plural_portugues)
                sqlc.Parameters.AddWithValue("@simbolo", simbolo)
                sqlc.Parameters.AddWithValue("@cotizacion", cotizacion)
                cnconexion.Open()
                intregistros = sqlc.ExecuteNonQuery()
                cnconexion.Close()
                Return intregistros
            End Function
    
            Public Function quitar_todo(ByVal id0 As Integer) As Integer
                Dim cnconexion As New SqlConnection(ConfigurationManager.ConnectionStrings("Comun").ConnectionString)
                Dim sqlc As New SqlCommand("quitar_divisas", cnconexion)
                Dim intregistros As Integer
                sqlc.CommandType = CommandType.StoredProcedure
                sqlc.Parameters.AddWithValue("@id0", id0)
                cnconexion.Open()
                intregistros = sqlc.ExecuteNonQuery()
                cnconexion.Close()
                Return intregistros
            End Function
    
        End Class
    
    End Namespace

    Los  procedimientos almacenados son

    USE [Comun]
    GO
    /****** Object:  StoredProcedure [dbo].[seleccionar_divisas]    Script Date: 28/07/2015 8:38:02 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[seleccionar_divisas]
    	(
    	@orden nvarchar(50)='divisa_singular_espanol',
    	@comienzo int=0,
    	@maximonumeroregistros int,
    	@condicion nvarchar(max)=''
    	)
    
    AS
    	set nocount on
    	declare @sql nvarchar(max),
    	@fin int
    	if @condicion<>'' set @condicion=' where '+ @condicion
    	set @comienzo+=1
    	set @fin=@comienzo+@maximonumeroregistros-1
    	set @sql=N'select id0,divisa_singular_espanol,divisa_singular_ingles,divisa_singular_frances,divisa_singular_portugues,divisa_plural_espanol,divisa_plural_ingles,divisa_plural_frances,divisa_plural_portugues,simbolo,cotizacion from (select row_number() over(order by case @orden when ''divisa_singular_espanol'' then divisa_singular_espanol end,case @orden when ''divisa_singular_espanol DESC'' then divisa_singular_espanol end desc,case @orden when ''divisa_singular_ingles'' then divisa_singular_ingles end,case @orden when ''divisa_singular_ingles DESC'' then divisa_singular_ingles end desc,case @orden when ''divisa_singular_frances'' then divisa_singular_frances end,case @orden when ''divisa_singular_frances DESC'' then divisa_singular_frances end desc,case @orden when ''divisa_singular_portugues'' then divisa_singular_portugues end,case @orden when ''divisa_singular_portugues DESC'' then divisa_singular_portugues end desc,case @orden when ''divisa_plural_espanol'' then divisa_plural_espanol end,case @orden when ''divisa_plural_espanol DESC'' then divisa_plural_espanol end desc,case @orden when ''divisa_plural_ingles'' then divisa_plural_ingles end,case @orden when ''divisa_plural_ingles DESC'' then divisa_plural_ingles end desc,case @orden when ''divisa_plural_frances'' then divisa_plural_frances end,case @orden when ''divisa_plural_frances DESC'' then divisa_plural_frances end desc,case @orden when ''divisa_plural_portugues'' then divisa_plural_portugues end,case @orden when ''divisa_plural_portugues DESC'' then divisa_plural_portugues end desc,case @orden when ''simbolo'' then simbolo end,case @orden when ''simbolo DESC'' then simbolo end desc,case @orden when ''cotizacion'' then cotizacion end,case @orden when ''cotizacion DESC'' then cotizacion end desc) as numero,id0,divisa_singular_espanol,divisa_singular_ingles,divisa_singular_frances,divisa_singular_portugues,divisa_plural_espanol,divisa_plural_ingles,divisa_plural_frances,divisa_plural_portugues,simbolo,cotizacion from 
    	(select d0 as id0,divisa_singular_espanol,divisa_singular_ingles,divisa_singular_frances,divisa_singular_portugues,divisa_plural_espanol,divisa_plural_ingles,divisa_plural_frances,divisa_plural_portugues,simbolo,cotizacion
    	from dbo.divisas
    	) tabla0'+ @condicion+') tabla1 where numero between @comienzo and @fin'
    	EXEC sp_executesql @sql, N'@orden nvarchar(50),@comienzo int,@fin int',@orden,@comienzo,@fin
    USE [Comun]
    GO
    /****** Object:  StoredProcedure [dbo].[seleccionar_numeroregistros_divisas]    Script Date: 28/07/2015 8:50:49 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[seleccionar_numeroregistros_divisas]
    	(
    	@condicion nvarchar(max)=''
    	)
    
    AS
    	set nocount on
    	declare @sql nvarchar(max)
    	if @condicion<>'' set @condicion=' where '+ @condicion
    	set @sql=N'select count(id0) from (select d0 as id0,divisa_singular_espanol,divisa_singular_ingles,divisa_singular_frances,divisa_singular_portugues,divisa_plural_espanol,divisa_plural_ingles,divisa_plural_frances,divisa_plural_portugues,
    	simbolo,cotizacion from dbo.divisas) tabla0'+ @condicion
    	EXEC sp_executesql @sql

    Si, por ejemplo, divisa_singular_espanol='afghani' está en el registro 1 y me situo en el registro 4 de seleccionar_divisas en el listado de la pantalla , comienzo=4, seleccionar_numeroregistros_divisas no me lo  cuenta. Si me situo en el  registro 1 sí. ¿Por qué?

    Es extraño ya que seleccionar_numeroregistros_divisas cuenta todos los registros. En teoría es independiente de seleccionar_divisas ¿o no?

    Gracias de antemano.




    • Editado volar.2014 miércoles, 29 de julio de 2015 7:57
    miércoles, 29 de julio de 2015 6:43

Respuestas

  • Hola de nuevo:

    Lo resolví poniendo gridvie.pageindex=0, forzando a que lea desde el primer registro.

    Curioso

    Gracias a todos

    • Marcado como respuesta volar.2014 miércoles, 29 de julio de 2015 11:17
    miércoles, 29 de julio de 2015 11:17