ADOを使用してSQLServer2005に対して(2つの)クエリを実行しようとしています。
SELECT
sp.nt_username AS NTUsername,
sp.hostname AS HostName
FROM sys.dm_tran_locks tl
INNER JOIN master.dbo.sysprocesses sp
ON tl.request_session_id = sp.spid
WHERE tl.resource_type = N'APPLICATION'
AND tl.resource_database_id = (
SELECT dbid
FROM master.dbo.sysprocesses
WHERE spid = @@spid)
およびSQLServer2000互換バージョン:
SELECT
sp.nt_username AS NTUsername,
sp.hostname AS HostName
FROM master.dbo.syslockinfo sli
INNER JOIN master.dbo.sysprocesses sp
ON sli.req_spid = sp.spid
WHERE rsc_type = 10 --10=Appliction
AND rsc_dbid = (
SELECT dbid
FROM master.dbo.sysprocesses
WHERE spid = @@spid)
クエリは正常に実行されます。
IRecordset rs =new Recordset();
rs.CursorLocation = adUseClient; //the default for a Recordset is adUseServer (Connection.Execute's default is adUseClient)
rs.CursorType := adOpenForwardOnly; //the default
rs.Open(szQuery, conn.ConnectionObject,
adOpenForwardOnly, //CursorType
adLockReadOnly, //LockType
adCmdText);
しかし、またはのステータスを確認します:BOF
EOF
if (rs.EOF) then
例外をトリガーします:
- HRESULT:0x80004005(不特定のエラー)
- エラーメッセージ:「データプロバイダーまたは他のサービスがE_FAILステータスを返しました」
ADOがそれほど惨めに失敗する原因となるこのクエリについてはどうでしょうか。
注:実際には一致する行があります:
provider
接続文字列で使用しているのはですProvider=SQLOLEDB
。
ボーナスチャター:
sysprocesses
nt_username nchar(128) hostname nchar(128)
両方のクエリ(ただし、一度に1つずつ)は機能します。例:
SELECT
sp.nt_username AS NTUsername
と
SELECT
sp.hostname AS HostName
仕事。両方のクエリは失敗します。