0

c++を使用してadodbを使用してテーブルにレコードを挿入しようとしています。

ストアドプロシージャ:

CREATE PROCEDURE [dbo].[dbo.insert_command]
  @Id INT OUTPUT,
  @Name    varchar(25),
  @Age   int = NULL
  -- WITH ENCRYPTION
AS
...

コマンドの宣言:

TESTHR(m_pInsertCommand.CreateInstance(__uuidof(Command)));
    m_pInsertCommand>ActiveConnection = m_pConnection;
    m_pInsertCommand>CommandText = L"dbo.insert_command";
    m_pInsertCommand>Parameters->Append(m_pInsertCommand->CreateParameter(L"Id", adInteger, adParamOutput, 4, vtNull));
    m_pInsertCommand>Parameters->Append(m_pInsertCommand->CreateParameter(L"Name", adVarChar, adParamInput, m_lLabelLength));
    m_pInsertCommand>Parameters->Append(m_pInsertCommand->CreateParameter(L"Age", adInteger, adParamInput, sizeof(long), vtNull));

パラメータの設定:

dbConnection.m_pInsertCommand->Parameters->Item[L"Id"]->Value = vtNull;
dbConnection.m_pInsertCommand->Parameters->Item[L"Name"]->Value = (BSTR) m_Name;
dbConnection.ExecuteCommand(dbConnection.m_pInsertCommand, adCmdStoredProc | adExecuteNoRecords);
Id = (long) dbConnection.m_pInsertDefectCommand->Parameters->Item[L"Id"]->Value;

SQLプロファイラーを介したトレース:

declare @p1 int
set @p1=16
exec dbo.insert_Command @p1 output,'Name',NULL
select @p1

私の質問は、なぜコマンドがsqlステートメントでパラメーター@p1を生成するのかということです。これにより、パラメーターIDがnullの場合にレコードを挿入しようとしているため、ロジックが変更されます。

なぜこれが起こっているのかについての提案はありますか?

前もって感謝します

4

0 に答える 0