2016-09-14 1 views
0

Чтобы начать, я расскажу вам об этом. Следующий вопрос для меня сложный, но ... Эти хранимые процедуры используются в двух разных базах данных. Оба имеют одинаковые данные, назовем их старше и новее.Что-то не так с кодом или хранимой процедурой

В старшей хранимой процедуре работает нормально, и я даже получаю возврат. Но в Новом случае этого не происходит.

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: Код обновлен.

+0

Не могли бы вы уточнить, что «не работает»? – peterG

+0

@peterG жаль работал. Обновлено. Благодаря! –

+0

Не делайте '' EXEC actual_user '"+ usuTelecom +"' "'. Это позволяет SQL Injection. Используйте 'SqlParameter'. Кроме того, почему 'CHAR (15)', а не 'VARCHAR (15)'? Кроме того, даже с помощью редактирования вы все равно не говорите, что это не работает. Есть ли ошибка? Если да, опубликуйте полное сообщение об ошибке. Вы просто не получаете никаких результатов? Если да, проверьте стандартную сортировку обеих БД, так как может быть разница, которая может повлиять на работу строк. Осталось добавить дополнительную информацию к вопросу. –

ответ

0
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, которая, как представляется, не объявлена. Но я думаю, что вы лишили некоторых вещей.

+0

Я обновлю код. –