Чтобы начать, я расскажу вам об этом. Следующий вопрос для меня сложный, но ... Эти хранимые процедуры используются в двух разных базах данных. Оба имеют одинаковые данные, назовем их старше и новее.Что-то не так с кодом или хранимой процедурой
В старшей хранимой процедуре работает нормально, и я даже получаю возврат. Но в Новом случае этого не происходит.
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
Но код I» 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`
Edit 1: При выполнении кода, на более старых БД работает. Но когда он работает в Newer DB, это не так. Я не знаю, идет ли речь о разрешениях, execSP или что-то не хватает. Поэтому, на мой взгляд, я могу сказать, что проблема заключается в SP.
Редактировать 2: Выполнение кода не дает результата. Это ошибка, выполняемая из EXEC на обеих БД.
Процедура 'actual_user' не имеет параметров и аргументы были поставлены
Edit 3: Код обновлен.
Не могли бы вы уточнить, что «не работает»? – peterG
@peterG жаль работал. Обновлено. Благодаря! –
Не делайте '' EXEC actual_user '"+ usuTelecom +"' "'. Это позволяет SQL Injection. Используйте 'SqlParameter'. Кроме того, почему 'CHAR (15)', а не 'VARCHAR (15)'? Кроме того, даже с помощью редактирования вы все равно не говорите, что это не работает. Есть ли ошибка? Если да, опубликуйте полное сообщение об ошибке. Вы просто не получаете никаких результатов? Если да, проверьте стандартную сортировку обеих БД, так как может быть разница, которая может повлиять на работу строк. Осталось добавить дополнительную информацию к вопросу. –