• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            ODBC數(shù)據(jù)類型定義

            Posted on 2009-04-02 17:45 Prayer 閱讀(4891) 評論(2)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)庫,SQLC/C++DB2

            在使用ODBC開發(fā)時一個重要的問題就是數(shù)據(jù)轉(zhuǎn)換的問題,在ODBC中存在下面的幾類數(shù)據(jù):

            l          數(shù)據(jù)庫中SQL語言表達(dá)數(shù)據(jù)的類型

            l          ODBC中表達(dá)數(shù)據(jù)的類型

            l          C語言中表達(dá)數(shù)據(jù)的類型

            在程序運(yùn)行過程中數(shù)據(jù)需要經(jīng)歷兩次轉(zhuǎn)換:C語言的數(shù)據(jù)或結(jié)構(gòu)類型與ODBC的數(shù)據(jù)類型的轉(zhuǎn)換,ODBC與SQL間數(shù)據(jù)類型的轉(zhuǎn)換。所以O(shè)DBC所定義的數(shù)據(jù)類型起到了中間橋梁的作用,在ODBC的驅(qū)動程序調(diào)用自己的DBMS數(shù)據(jù)庫訪問接口時就需要對數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換。我們所需要關(guān)注的是C語言的數(shù)據(jù)類型和ODBC數(shù)據(jù)類型間的轉(zhuǎn)換關(guān)系。

            從下圖中可以看到ODBC中定義的數(shù)據(jù)類型和SQL語言中數(shù)據(jù)類型的對應(yīng)關(guān)系,所以通過下表我們可以將ODBC和SQL語言間的數(shù)據(jù)一一對應(yīng),在后面的文字中我們不再區(qū)分ODBC數(shù)據(jù)類型和SQL語言數(shù)據(jù)類型。

            ODBC數(shù)據(jù)類型名稱

            SQL語言數(shù)據(jù)類型名稱

            SQL_CHAR

            CHAR(n)

            SQL_VARCHAR

            VARCHAR(n)

            SQL_LONGVARCHAR

            LONG VARCHAR

            SQL_WCHAR

            WCHAR(n)

            SQL_WVARCHAR

            VARWCHAR(n)

            SQL_WLONGVARCHAR

            LONGWVARCHAR

            SQL_DECIMAL

            DECIMAL(p,s)

            SQL_NUMERIC

            NUMERIC(p,s)

            SQL_SMALLINT

            SMALLINT

            SQL_INTEGER

            INTEGER

            SQL_REAL

            REAL

            SQL_FLOAT

            FLOAT(p)

            SQL_DOUBLE

            DOUBLE PRECISION

            SQL_BIT

            BIT

            SQL_TINYINT

            TINYINT

            SQL_BIGINT

            BIGINT

            SQL_BINARY

            BINARY(n)

            SQL_VARBINARY

            VARBINARY(n)

            SQL_LONGVARBINARY

            LONG VARBINARY

            SQL_TYPE_DATE[6]

            DATE

            SQL_TYPE_TIME[6]

            TIME(p)

            SQL_TYPE_TIMESTAMP[6]

            TIMESTAMP(p)

            SQL_GUID

            GUID

            圖2.5

            使用C/C++語言開發(fā),那么必定會在與ODBC語言間存在數(shù)據(jù)的轉(zhuǎn)換的問題,因為ODBC所存在的一些數(shù)據(jù)類型在C語言中是不存在的。在ODBC以宏定義的方式定義了C語言和ODBC中使用的數(shù)據(jù)類型:

            C語言數(shù)據(jù)類型名稱

            ODBC 數(shù)據(jù)類型定義

            C語言實際類型

            SQL_C_CHAR

            SQLCHAR *

            unsigned char *

            SQL_C_SSHORT[j]

            SQLSMALLINT

            short int

            SQL_C_USHORT[j]

            SQLUSMALLINT

            unsigned short int

            SQL_C_SLONG[j]

            SQLINTEGER

            long int

            SQL_C_ULONG[j]

            SQLUINTEGER

            unsigned long int

            SQL_C_FLOAT

            SQLREAL

            float

            SQL_C_DOUBLE

            SQLDOUBLE, SQLFLOAT

            double

            SQL_C_BIT

            SQLCHAR

            unsigned char

            SQL_C_STINYINT[j]

            SQLSCHAR

            signed char

            SQL_C_UTINYINT[j]

            SQLCHAR

            unsigned char

            SQL_C_SBIGINT

            SQLBIGINT

            _int64[h]

            SQL_C_UBIGINT

            SQLUBIGINT

            unsigned _int64[h]

            SQL_C_BINARY

            SQLCHAR *

            unsigned char *

            SQL_C_BOOKMARK[i]

            BOOKMARK

            unsigned long int[d]

            SQL_C_VARBOOKMARK

            SQLCHAR *

            unsigned char *

            SQL_C_TYPE_DATE[c]

            SQL_DATE_STRUCT

            struct tagDATE_STRUCT {
                 SQLSMALLINT year;
                 SQLUSMALLINT month;
                 SQLUSMALLINT day;
            } DATE_STRUCT;[a]

            SQL_C_TYPE_TIME[c]

            SQL_TIME_STRUCT

            struct tagTIME_STRUCT {
                 SQLUSMALLINT hour;
                 SQLUSMALLINT minute;
                 SQLUSMALLINT second;
            } TIME_STRUCT;[a]

            SQL_C_TYPE_TIMESTAMP[c]

            SQL_TIMESTAMP_STRUCT

            struct tagTIMESTAMP_STRUCT {
                 SQLSMALLINT year;
                 SQLUSMALLINT month;
                 SQLUSMALLINT day;
                 SQLUSMALLINT hour;
                 SQLUSMALLINT minute;
                 SQLUSMALLINT second;
                 SQLUINTEGER fraction;[b]
            } TIMESTAMP_STRUCT;[a]

            SQL_C_NUMERIC

            SQL_NUMERIC_STRUCT

            struct tagSQL_NUMERIC_STRUCT {
                 SQLCHAR precision;
                 SQLSCHAR scale;
                 SQLCHAR sign[g];
                 SQLCHAR val[SQL_MAX_NUMERIC_LEN];[e], [f]
            } SQL_NUMERIC_STRUCT;

            SQL_C_GUID

            SQLGUID

            struct tagSQLGUID {
            DWORD Data1;
            WORD Data2;
            WORD Data3;
            BYTE Data4[8];
            } SQLGUID;[k]

            圖2.6

            所以在ODBC的開發(fā)過程中不要使用int , float 之類的C語言的實際類型來定義變量而應(yīng)該使用ODBC定義的數(shù)據(jù)類型來定義變量,如:SQLINTEGER,SQLFLOAT。

            Feedback

            # re: ODBC數(shù)據(jù)類型定義  回復(fù)  更多評論   

            2011-04-07 13:11 by sss
            謝謝

            # re: ODBC數(shù)據(jù)類型定義[未登錄]  回復(fù)  更多評論   

            2011-05-23 16:17 by 隨風(fēng)
            謝謝~非常有用~
            久久久久九九精品影院| 一本色道久久88综合日韩精品 | 久久人人爽人人爽人人片AV不| 久久人人爽人爽人人爽av| 欧美精品乱码99久久蜜桃| 亚洲精品无码久久千人斩| 国产精品99久久精品| 久久青青草原精品国产软件 | 久久毛片免费看一区二区三区| 日韩亚洲国产综合久久久| 久久亚洲私人国产精品vA| 国产99久久久久久免费看| 精品久久久久成人码免费动漫| 久久ww精品w免费人成| 91麻精品国产91久久久久| 国产精品久久久久久久久久影院 | 精品久久久一二三区| 99久久超碰中文字幕伊人| 久久er国产精品免费观看8| 日本强好片久久久久久AAA| 久久久无码精品午夜| 久久久久久免费一区二区三区| 久久综合久久综合亚洲| 国产精品九九久久免费视频 | 久久精品无码免费不卡| 久久精品99久久香蕉国产色戒| 热久久最新网站获取| 久久国产影院| 国产香蕉97碰碰久久人人| 国产精品岛国久久久久| 久久国产乱子伦免费精品| 亚洲中文字幕无码久久综合网| 人妻无码精品久久亚瑟影视| 99久久精品免费| 91亚洲国产成人久久精品网址| 国产精品久久久久久吹潮| 久久人人妻人人爽人人爽| 伊人久久大香线蕉av一区| 成人午夜精品无码区久久| 久久国产免费直播| 性欧美大战久久久久久久久 |