VCでSQLサーバー間の型の変換について

[戻る]
田中さん 2006/03/09(木) 05:07:17
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;
};

wood 2006/03/09(木) 06:36:17
MFC使って、ウィザード使って、参考ソース吐き出してみるのもひとつの手かな?
OLE DB あたりのソースは参考に出来ないかな?
DDX/DDVあたりが参考になると思うのですが
的外れかも知れません、

ほかの、あまりあいまいでない回答をご期待ください

Blue 2006/03/09(木) 09:39:32
Recordset フィールドを C/C++ 変数にバインドするには 
http://www.microsoft.com/japan/developer/library/ado260/mdmscusingadovcextensio
ns.htm
が参考になそうな。。。

ITO 2006/03/11(土) 14:13:18
田中さんの内容を読むと、「adSmallInt型」はSQL固有の型です。
型変換は出来ないと思います。
「adSmallInt型」と同じ「型」を「SQL_C_XXXX」から選んでバインドする
方法だと思います。
SQLServerなら詳しい情報があると思います。
#オラクルのときは情報が少なくて苦労しました。

ITO 2006/03/11(土) 15:56:11
参考になりますか?

http://powersoft.ashisuto.co.jp/technicalservice/eas-man/jagref/jagrefp41.htm

中田さん 2006/03/12(日) 00:07:31
adSmallInt は short

田中さん 2006/03/12(日) 10:35:16
皆様、回答ありがとうございます。

MSDNは最近構成が変わってしまいましたね。以前の情報を探しにくくて困ってます。
adSmallIntは2バイトなので同じ2バイトのshortを使って解決しました。

という事は1バイトの整数ならbyteを使えば行けるのかな〜?と思い試してみます。
adSmallIntについては解決しました。
解決済みはのチェックはもう少し後に付けさせて頂きます。

ITO 2006/03/12(日) 10:55:02
 相手がshort型なら、こちらもshort型で受取る方がいいです。
 値の範囲が間に合うのなら、一度short型で受取ってからbyte型に変えるのが
いいと思います。
 型を合わせないと目的の値が取得出来ないことがあります。
 もし、byte型で受取りたいのなら、SqlServer側もbyte型に変える必要があります。

田中さん 2006/03/25(土) 11:59:40
[[解決]]
他にも聞きたい事が出てきましたが、
とりあえずこの質問は解決しました。

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