要开始我会告诉你这一点。下一个问题对我来说很棘手,但是......这个存储过程用在两个不同的数据库中。两者都具有相同的数据,我们称它们为更旧和更新。代码或存储过程有问题
在较旧的存储过程工作正常,我什至得到了回报。但在新一代并不一样。
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
但我的代码m使用不适用于较新的数据库。就是这样。
这是我的新代码。它适用于较旧的数据库,但较新的数据库不适用。可能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它的工作原理。但是,当它在较新的数据库上运行时,它不会。我不知道它是关于权限,execSP还是缺失的东西。所以在我看来,我可以说问题出在SP上。
编辑2: 从代码运行我得不到输出。 这是从两个DB上的EXEC运行的错误。
过程 'actual_user' 不具有任何参数和参数被供给
编辑3:代码更新。
你能更准确地说'不行'吗? – peterG
@peterG对不起,正在努力。更新。谢谢! –
不要执行''EXEC actual_user'“+ usuTelecom +”'“'。这允许SQL注入。使用'SqlParameter'。另外,为什么'CHAR(15)'而不是'VARCHAR(15)'?此外,即使编辑,你仍然不说_what_不起作用。有错误吗?如果是这样,请发布完整的错误消息。你只是没有结果?如果是这样,请检查两个数据库的默认排序规则,因为这可能会改变字符串比较的工作方式。否则,请在该问题中添加更多详细信息。 –