ADOのCommandにParameterをAppendする時の疑問 – プログラミング – Home

通知
すべてクリア

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


SE_DE
 SE_DE
(@SE_DE)
ゲスト
結合: 21年前
投稿: 1
Topic starter  

はじめまして。
早速ですが、質問です。

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にも該当しないので困っています。

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

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

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


引用解決済
トピックタグ
とおり
 とおり
(@とおり)
ゲスト
結合: 21年前
投稿: 43
 

マルチはダメだ。by瀬とっぷ


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

↑ばればれ ハンドル なのか、他人ハンドルなのか

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました