Microsoft SQL Server上のユーザー定義関数を、C++で記述されたコンソールアプリケーションから呼び出そうとしています。私はADOを全面的に使用しています。私のプログラムからADOを使用してC++からユーザー定義関数を呼び出す方法
My機能は、次のようになります(と私は管理スタジオ内からそれを使用する場合、それは動作します)
CREATE FUNCTION [dbo].[funcHowOftenDidHeWin]
(
@playername as varchar(15)
@percentWon float OUTPUT
)
RETURNS float
AS
BEGIN
DECLARE @wintimes float
DECLARE @participated float
DECLARE @percentWon float
SELECT @wintimes = COUNT(DidWin)
FROM PPLP0p02
WHERE DidWin = 1 AND [email protected]
SELECT @participated = COUNT(DidWin)
FROM PPLP0p02
WHERE Playername = @playername
IF @wintimes >0
SET @percentWon = @wintimes/@participated *100
IF @wintimes = 0
SET @percentWon = 0
RETURN @percentWon
END
GO
私は次のようにそれを呼び出そう:まあ
USEADO::_ConnectionPtr connection;
USEADO::_RecordsetPtr recordset; //create a "
if(FAILED(hr = CoInitialize(NULL))) //
{ return hr;}
if(FAILED(hr = connection.CreateInstance(__uuidof(USEADO::Connection))))
{ return hr;}
if(FAILED(hr = recordset.CreateInstance(__uuidof(USEADO::Recordset))))
{ return hr;}
connection->CursorLocation = USEADO::adUseServer;
try
{
connection->Open(L"Provider=SQLOLEDB.1;Persist Security Info=False;User ID=Test;Initial Catalog=Haufen;Data Source=Wolle\\SQLEXPRESS", L"Test", L"Test", USEADO::adConnectUnspecified);
}
catch(...) {std::cout << "!!! connection->Open(ConnectionString FAILED !!!" << std::endl; }
//This works
recordset->Open("SELECT playername FROM Summary WHERE playersatbegin=5",connection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
//This not
recordset->Open("SELECT dbo.funcHowOftenDidHeWin('Lumpi') ",connection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
、それは動作しません。デバッガは行1580でmasado15.tliで終了し、VSは次のエラーを持つウィンドウを表示します。35h.exeの0x7c812afbで未処理の例外:メモリ場所0x0012c3f8のMicrosoft C++例外:_com_error私は、構文が正しいかどうかはわからない
は、私はそこに
すべてのヘルプ....サーバーは、私は結果を表示したいテーブルから知っていることになっているか疑問?ありがとう
ルンピ
エラーが表示されますか?もしそうなら...ここに貼り付けてください。 – garnertb
エラーは次のとおりです。35h.exeの0x7c812afbで未処理例外:Microsoft C++例外:メモリ位置0x0012c3f8の_com_error .. – Lumpi