私はこれを説明します。次の質問は私には難しいですが、...このストアドプロシージャは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を供給した:コード更新。
'動作しない'ということについてもっと正確に教えてください。 – peterG
@peterG申し訳ありませんでした。更新しました。ありがとう! –
'' EXEC actual_user '"+ usuTelecom +"' "'しないでください。それはSQLインジェクションを可能にします。 'SqlParameter'を使います。また、 'VARCHAR(15)'ではなく 'CHAR(15)'を使用するのはなぜですか?また、編集したとしても、まだ動作していないとは言いません。エラーはありますか?その場合は、完全なエラーメッセージを投稿してください。あなたは単に結果が得られませんか?その場合は、両方のDBのデフォルトの照合をチェックしてください。文字列の比較の仕方が変わる可能性があります。そうでなければ、質問に詳細を追加します。 –