2016-09-14 6 views
0

私はこれを説明します。次の質問は私には難しいですが、...このストアドプロシージャは2つの異なるデータベースで使用されています。どちらも同じデータを持っています。古いものと新しいものを呼びましょう。コードまたはストアドプロシージャに何か問題があります

古いバージョンでは、ストアドプロシージャは正常に動作し、復帰します。しかし、Newerでは同じことは起こりません。私はこのようなEXEC(この方法によってが両方のデータベースで動作)を実行すると

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) 

は:

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 

しかし、私は「コード:

exec actual_user 'telc\u124453' 

私はこの出力を取得します新しいデータベースでm usingが動作しません。それはちょうどこのようなものです。

ここに私の新しいコードがあります。古いDBでは動作しますが、新しいDBでは動作しません。 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

'動作しない'ということについてもっと正確に教えてください。 – peterG

+0

@peterG申し訳ありませんでした。更新しました。ありがとう! –

+0

'' EXEC actual_user '"+ usuTelecom +"' "'しないでください。それはSQLインジェクションを可能にします。 'SqlParameter'を使います。また、 'VARCHAR(15)'ではなく 'CHAR(15)'を使用するのはなぜですか?また、編集したとしても、まだ動作していないとは言いません。エラーはありますか?その場合は、完全なエラーメッセージを投稿してください。あなたは単に結果が得られませんか?その場合は、両方のDBのデフォルトの照合をチェックしてください。文字列の比較の仕方が変わる可能性があります。そうでなければ、質問に詳細を追加します。 –

答えて

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) 

エラーが発生する理由は、パラメータが渡されないためです。これは問題のパラメータを渡します。

ストアドプロシージャで私が理解できないことの1つは、宣言されていないような@usuario変数がある理由です。私はあなたがいくつかのものを取り除いたと思っています。

+0

コードを更新します。 –

関連する問題