开始我会告诉你这个。下一个问题对我来说很棘手,但是......这个存储过程用于两个不同的数据库。两者都有相同的数据,让我们把它们称为更旧和更新。
在较旧的存储过程中工作正常,我甚至得到了回报。但在较新的情况下却不会发生同样的情况。
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:代码已更新。
答案 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变量。我想你已经剥掉了一些东西。