ADOのCommandにParameterをAppendする時の疑問

[戻る]
SE_DE 2003/12/20(土) 18:01:23
はじめまして。
早速ですが、質問です。

ADOでConnection.Executeをずっと行っていると
メモリリークを起こしてしまうために、
Command.Executeを使おうと思ったのですが、うまく動作致しません。

//実装方法
hr  = m_pConnection.CreateInstance(__uuidof(Connection));    // 生データ書込用コ
ネクションオブジェクト生成
m_pCommand.CreateInstance(__uuidof(Command));
m_pParameter1.CreateInstance(__uuidof(Parameter));
m_pParameter2.CreateInstance(__uuidof(Parameter));        
m_pParameter3.CreateInstance(__uuidof(Parameter));        
・
・
・
・
    char *cCdTag = "100890000001";
    char *cDateTime = "2003/12/20/ 10:00:00";
         char Data = 'a';

    VARIANT vtRoyalty1;
    vtRoyalty1.vt = VT_I1 | VT_BYREF;
    vtRoyalty1.pcVal = cCdTag;

    VARIANT vtRoyalty2;
    vtRoyalty2.vt = VT_I1 | VT_BYREF;
    vtRoyalty2.pcVal = cDateTime;

    VARIANT vtRoyalty3;
    vtRoyalty3.vt = VT_I1;
    vtRoyalty3.cVal = Data;

    m_pParameter1 = m_pCommand->CreateParameter
("CD_TAG",adNumeric,adParamInput,strlen(cCdTag),vtRoyalty1);
    m_pParameter1->Precision= 12;
    m_pCommand->Parameters->Append(m_pParameter1);
    m_pParameter1->Value = vtRoyalty1;

    m_pParameter2 = m_pCommand->CreateParameter
("DATE_TIME",adDBTimeStamp,adParamInput,strlen(DateTime),vtRoyalty2);
    m_pCommand->Parameters->Append(m_pParameter2);
    m_pParameter2->Value = vtRoyalty2;

    m_pParameter3 = m_pCommand->CreateParameter
("DATA",adUnsignedTinyInt,adParamInput,8,vtRoyalty3);
    m_pCommand->Parameters->Append(m_pParameter3);
    m_pParameter3->Value = vtRoyalty3;

    strcpy(cSql,"INSERT INTO A_TEST (CD_TAG, DATE_TIME, DATA ) VALUES 
(?,?,?) ");




m_pCommand->ActiveConnection = m_pConnection;        // 実行するオブジェクト設
定
m_pCommand->CommandText = cSql;            // 実行するクエリ
m_pCommand->CommandType = adCmdText;            // 最適化
m_pCommand->Execute(NULL, NULL, adCmdText);


----------------------------------------------------------

テーブル構成
A_TEST
---------------------------------
CD_TAG     |  NUMERIC(12.0)
---------------------------------
DATE_TIME  |  DATETIME
---------------------------------
DATA       |  CHAR(1)
---------------------------------



-------------------------------------------------------------

・今、悩んでおりますのが、

@. VARIANTにデータを入れるときに
CD_TAGの場合、整数に直すと__int64型になるのですが、
どのvalueにも該当しないので困っています。

A. DATE_TIMEは、現在文字列で渡ってくるので、
文字列として扱っています。
これをそのまま文字列で入れると、渡って来たデータとは、別の
日付でDBに登録されてしまっています。

B.DATAは、char(1)なのですが、DataTypeEnumをadChapterにすると
エラーになってしまいます(文字列として扱うので・・・)
それで、adUnsignedTinyIntにしたのですが、[*]
という文字に変換されてしまいます。

以上、3点ですが、渡したデータ通りDBに登録する方法
を教えていただけないでしょうか?

とおり 2003/12/21(日) 13:33:11
マルチはダメだ。by瀬とっぷ

wood 2003/12/24(水) 05:41:46
↑ばればれ ハンドル なのか、他人ハンドルなのか

>A. DATE_TIMEは、現在文字列で渡ってくるので、
>文字列として扱っています。
>これをそのまま文字列で入れると、渡って来たデータとは、別の
>日付でDBに登録されてしまっています。
そもそもそのまま文字列として扱うこと自体間違ってませんか
YY:MM:DDなどはそれぞれ2桁ずつまたは、4桁2桁2桁に分解し数値変換し
DATETIME構造体に入れてから渡さないと違う値になって当たり前なんじゃないの?

古いスレッドには追加発言できません。