VisualC.NET、WindowsSDKにて開発しています。
SQLサーバーから値を取得する時のSQLサーバーとクライアントとの型の変換について
お尋ねします。
SQLサーバー上のadSmallInt型のフィールドにAddNew()で値を入れようと思います。
そこでレコードセットに値を入れようと思うのですがレコードをInt型で定義すると値が
登録出来ません。
C言語の型とSQLサーバーの型の変換が必要と思うのですが
型の変換はどのようにすれば良いのでしょうか?
ちなみに登録したいレコードセットの定義は以下のようになっています。
class CRsSyain : public CADORecordBinding
{
BEGIN_ADO_BINDING(CRsSyain)
//社員DATAのレコード情報
//社員ID
ADO_VARIABLE_LENGTH_ENTRY2(1, adSmallInt, m_syain_id,sizeof
(m_syain_id), ml_syain_id, TRUE)
//社員名
//ADO_VARIABLE_LENGTH_ENTRY2(2, adVarChar,
m_syain_name,sizeof(m_syain_name), ml_syain_name, TRUE)
END_ADO_BINDING()
public:
//テーブルの中身
//社員ID
int m_syain_id; //ここの定義をadSmallInt型にしたい
ULONG ml_syain_id;
//社員名
CHAR m_syain_name[20];
ULONG ml_syain_name;
};
MFC使って、ウィザード使って、参考ソース吐き出してみるのもひとつの手かな?
OLE DB あたりのソースは参考に出来ないかな?
DDX/DDVあたりが参考になると思うのですが
的外れかも知れません、
ほかの、あまりあいまいでない回答をご期待ください
Recordset フィールドを C/C++ 変数にバインドするには
http://www.microsoft.com/japan/developer/library/ado260/mdmscusingadovcextensio
ns.htm
が参考になそうな。。。
田中さんの内容を読むと、「adSmallInt型」はSQL固有の型です。
型変換は出来ないと思います。
「adSmallInt型」と同じ「型」を「SQL_C_XXXX」から選んでバインドする
方法だと思います。
SQLServerなら詳しい情報があると思います。
#オラクルのときは情報が少なくて苦労しました。
adSmallInt は short
皆様、回答ありがとうございます。
MSDNは最近構成が変わってしまいましたね。以前の情報を探しにくくて困ってます。
adSmallIntは2バイトなので同じ2バイトのshortを使って解決しました。
という事は1バイトの整数ならbyteを使えば行けるのかな~?と思い試してみます。
adSmallIntについては解決しました。
解決済みはのチェックはもう少し後に付けさせて頂きます。
相手がshort型なら、こちらもshort型で受取る方がいいです。
値の範囲が間に合うのなら、一度short型で受取ってからbyte型に変えるのが
いいと思います。
型を合わせないと目的の値が取得出来ないことがあります。
もし、byte型で受取りたいのなら、SqlServer側もbyte型に変える必要があります。
他にも聞きたい事が出てきましたが、
とりあえずこの質問は解決しました。