代码或存储过程出了问题

时间:2016-09-14 20:40:01

标签: vb.net stored-procedures sql-server-2008-r2

开始我会告诉你这个。下一个问题对我来说很棘手,但是......这个存储过程用于两个不同的数据库。两者都有相同的数据,让我们把它们称为更旧和更新。

在较旧的存储过程中工作正常,我甚至得到了回报。但在较新的情况下却不会发生同样的情况。

ALTER PROCEDURE dbo.actual_user
    @user char(15)
AS
    SELECT  
        US.Usercode, US.UsercodeSQL, US.LastName, US.Name, US.Nivel,
        CONVERT(int, US.Timestamp) TS,
        S.DateChanged, S.TolPSW, S.LoginsTotals, S.LoginsUsed,
        S.InitialDate, S.EndDate
    FROM    
        System_Users US
    INNER JOIN 
        Session_Users S ON US.UssercodeSQL = S.UssercodeSQL 
    WHERE   
        US.UsercodeSQL = user_id(@usuario) 
        AND S.UsercodeSQL = user_id(@usuario)

当我像这样运行EXEC时(通过这种方式适用于两个数据库):

exec actual_user 'telc\u124453'

我得到了这个输出:

Usercode                      UsercodeSQL LastName                       Name                           Nivel    TS          DateChanged           TolPSW          LoginsTotals LoginsUsed        InitialDate        EndDate
----------------------------- ----------- ------------------------------ ------------------------------ ------ ----------- ----------------------- --------------- ------------- ------------ ----------------------- -----------------------  
FESPE                         15          Brond                          Manny                          NULL   16838419    2007-04-16 16:57:00     30              10          0            NULL                    NULL

但我正在使用的代码在较新的数据库中不起作用。就像这样。

这是我的新代码。它适用于较旧的数据库,但较新的数据库不适用。可能是SqlServer的版本因存储过程中的 user_id 而无法正常工作,我不知道。

Public Function UsuarioActual(ByVal datoUsuario As String) As DSUsuario.UsuarioActualRow 

    Dim ds As New DSUsuario
    Dim dt As New DataTable
    Dim sqlConn As SqlConnection = New SqlConnection()
    Dim sqlAdp As SqlDataAdapter

    Try
        sqlConn = MyBase.GetConnection
        Dim command As New SqlCommand("Usuario_Actual", sqlConn)
        command.CommandType = CommandType.StoredProcedure
        command.Parameters.AddWithValue("@usuario", datoUsuario)
        sqlAdp = New SqlDataAdapter(command)
        sqlAdp.Fill(dt)

    Catch ex As Exception

        proc = "UsuarioActual"
        ERROR

        epn = New FactEspExceptions(ex, TipoExcepcion.ErrorBD, proc, Nothing, ex.Message)

        epn = New FactEspExceptions(ex, TipoExcepcion.ErrorBD, proc)
        epn.AuditarError()
        Throw epn

    Finally
        sqlConn.Close()
        sqlConn = Nothing
    End Try

    If ds.UsuarioActual.Rows.Count > 0 Then 
        Return ds.UsuarioActual.Rows(0)
    Else
        Return Nothing
    End If

End Function`

编辑1: 代码运行时,在旧的DB上运行。但是当它在Newer DB上运行时却没有。我不知道它是关于权限,execSP还是缺少某些东西。所以在我看来,我可以说问题出在SP上。

编辑2: 从代码运行我没有输出。 这是从两个DB上的EXEC运行的错误。

  

过程'actual_user'没有参数和参数提供

编辑3:代码已更新。

1 个答案:

答案 0 :(得分:1)

  Dim comando As String = "EXEC actual_user"


    Try
        sqlConn = MyBase.GetConnection

        Dim com As SqlCommand = New SqlCommand()

        com.CommandText = comando
        com.Connection = sqlConn
        com.CommandType = CommandType.StoredProcedure
        com.Parameters.AddWithValue("@User", usuTelecom)

您收到错误的原因是没有传递任何参数。这将传递相关参数。

我在你的存储过程中不理解的一件事就是为什么有一个似乎没有声明的@usuario变量。我想你已经剥掉了一些东西。