SQL Server
SQL Server
PC/SC List Smart Card Readers (and USB Tokens)
See more SCard Examples
Demonstrates how to list the smart card readers and USB tokens connected to the computer.Note: This functionality was introduced in Chilkat v9.5.0.87.
Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
DECLARE @scard int
EXEC @hr = sp_OACreate 'Chilkat.SCard', @scard OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
-- First establish a context to the PC/SC Resource Manager
EXEC sp_OAMethod @scard, 'EstablishContext', @success OUT, 'user'
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @scard, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @scard
RETURN
END
DECLARE @stReaders int
EXEC @hr = sp_OACreate 'Chilkat.StringTable', @stReaders OUT
EXEC sp_OAMethod @scard, 'ListReaders', @success OUT, @stReaders
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @scard, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @scard
EXEC @hr = sp_OADestroy @stReaders
RETURN
END
DECLARE @numReaders int
EXEC sp_OAGetProperty @stReaders, 'Count', @numReaders OUT
DECLARE @i int
SELECT @i = 0
WHILE @i < @numReaders
BEGIN
EXEC sp_OAMethod @stReaders, 'StringAt', @sTmp0 OUT, @i
PRINT @i + ': ' + @sTmp0
SELECT @i = @i + 1
END
-- Sample output:
-- 0: Alcor Micro USB Smart Card Reader 0
-- 1: FS USB Token 0
-- 2: FT Java Token 0
-- 3: SCM Microsystems Inc. SCR33x USB Smart Card Reader 0
-- 4: Yubico YubiKey OTP+FIDO+CCID 0
-- Applications should always release the context when finished.
EXEC sp_OAMethod @scard, 'ReleaseContext', @success OUT
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @scard, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
END
EXEC @hr = sp_OADestroy @scard
EXEC @hr = sp_OADestroy @stReaders
END
GO