青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

r2100

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  8 Posts :: 9 Stories :: 2 Comments :: 0 Trackbacks

常用鏈接

留言簿(3)

我參與的團(tuán)隊(duì)

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

SQLExecDirect函數(shù)源代碼
static SQLRETURN
ODBCExecDirect(ODBCStmt 
*stmt, SQLCHAR *szSqlStr, SQLINTEGER nSqlStr)
{
    
char *query;
    MapiMsg ret;
    MapiHdl hdl;

    hdl 
= stmt->hdl;

    
if (stmt->State >= EXECUTED1 || (stmt->State == EXECUTED0 && mapi_more_results(hdl))) {
        
/* Invalid cursor state */
        addStmtError(stmt, 
"24000", NULL, 0);
        
return SQL_ERROR;
    }

    
/* TODO: convert ODBC escape sequences ( {d 'value'} or {t 'value'} or
       {ts 'value'} or {escape 'e-char'} or {oj outer-join} or
       {fn scalar-function} etc. ) to MonetDB SQL syntax 
*/
    query 
= ODBCTranslateSQL(szSqlStr, (size_t) nSqlStr, stmt->noScan);

    ODBCResetStmt(stmt);

#ifdef ODBCDEBUG
    ODBCLOG(
"SQLExecDirect: \"%s\"\n", query);
#endif

    ret 
= mapi_query_handle(hdl, query);
    free(query);
    
switch (ret) {
    
case MOK:
        
break;
    
case MTIMEOUT:
        
/* Communication link failure */
        addStmtError(stmt, 
"08S01", mapi_error_str(stmt->Dbc->mid), 0);
        
return SQL_ERROR;
    
default:
        
/* General error */
        addStmtError(stmt, 
"HY000", mapi_error_str(stmt->Dbc->mid), 0);
        
return SQL_ERROR;
    }

    
/* now get the result data and store it to our internal data structure */

    
return ODBCInitResult(stmt);
}

As mentioned earlier, it is more efficient to reuse statements than to drop them and allocate new ones. Before executing a new SQL statement on a statement, applications should be sure that the current statement settings are appropriate. These include statement attributes, parameter bindings, and result set bindings. Generally, parameters and result sets for the old SQL statement need to be unbound (by calling SQLFreeStmt with the SQL_RESET_PARAMS and SQL_UNBIND options) and rebound for the new SQL statement.

When the application has finished using the statement, it calls SQLFreeHandle to free the statement. After freeing the statement, it is an application programming error to use the statement's handle in a call to an ODBC function; doing so has undefined but probably fatal consequences.

When SQLFreeHandle is called, the driver releases the structure used to store information about the statement.

SQLDisconnect automatically frees all statements on a connection.


         
/**********************************************
 * ODBCStmt.c
 *
 * Description:
 * This file contains the functions which operate on
 * ODBC statement structures/objects (see ODBCStmt.h).
 *
 * Author: Martin van Dinther
 * Date  : 30 aug 2002
 *
 *********************************************
*/

#include 
"ODBCGlobal.h"
#include 
"ODBCStmt.h"

#define ODBC_STMT_MAGIC_NR  5461    /* for internal sanity check only */


/*
 * Creates a new allocated ODBCStmt object and initializes it.
 *
 * Precondition: none
 * Postcondition: returns a new ODBCStmt object
 
*/
ODBCStmt 
*
newODBCStmt(ODBCDbc 
*dbc)
{
    ODBCStmt 
*stmt = (ODBCStmt *) malloc(sizeof(ODBCStmt));
    assert(stmt);

    assert(dbc);
    assert(dbc
->mid);

    
if (stmt == NULL) {
        
/* Memory allocation error */
        addDbcError(dbc, 
"HY001", NULL, 0);
        
return NULL;
    }

    stmt
->Dbc = dbc;
    stmt
->Error = NULL;
    stmt
->RetrievedErrors = 0;

    stmt
->State = INITED;
    stmt
->hdl = mapi_new_handle(dbc->mid);
    
if (stmt->hdl == NULL) {
        
/* Memory allocation error */
        addDbcError(dbc, 
"HY001", NULL, 0);
        free(stmt);
        
return NULL;
    }
    assert(stmt
->hdl);

    stmt
->currentRow = 0;
    stmt
->startRow = 0;
    stmt
->rowSetSize = 0;
    stmt
->queryid = -1;
    stmt
->nparams = 0;
    stmt
->querytype = -1;
    stmt
->rowcount = 0;

    
/* add this stmt to the administrative linked stmt list */
    stmt
->next = dbc->FirstStmt;
    dbc
->FirstStmt = stmt;

    stmt
->cursorType = SQL_CURSOR_FORWARD_ONLY;
    stmt
->cursorScrollable = SQL_NONSCROLLABLE;
    stmt
->retrieveData = SQL_RD_ON;
    stmt
->noScan = SQL_NOSCAN_OFF;

    stmt
->ApplRowDescr = newODBCDesc(dbc);
    stmt
->ApplParamDescr = newODBCDesc(dbc);
    stmt
->ImplRowDescr = newODBCDesc(dbc);
    stmt
->ImplParamDescr = newODBCDesc(dbc);
    stmt
->AutoApplRowDescr = stmt->ApplRowDescr;
    stmt
->AutoApplParamDescr = stmt->ApplParamDescr;

    
if (stmt->ApplRowDescr == NULL || stmt->ApplParamDescr == NULL || stmt->ImplRowDescr == NULL || stmt->ImplParamDescr == NULL) {
        destroyODBCStmt(stmt);
        
return NULL;
    }

    stmt
->ApplRowDescr->sql_desc_alloc_type = SQL_DESC_ALLOC_AUTO;
    stmt
->ApplParamDescr->sql_desc_alloc_type = SQL_DESC_ALLOC_AUTO;
    stmt
->ImplRowDescr->sql_desc_alloc_type = SQL_DESC_ALLOC_AUTO;
    stmt
->ImplParamDescr->sql_desc_alloc_type = SQL_DESC_ALLOC_AUTO;
    stmt
->ImplRowDescr->Stmt = stmt;
    stmt
->ImplParamDescr->Stmt = stmt;

    stmt
->Type = ODBC_STMT_MAGIC_NR;    /* set it valid */

    
return stmt;
}

SQLFreeHandle
ODBCFreeStmt_(ODBCStmt 
*stmt)
{
    
/* check if statement is not active */
    
if (stmt->State >= EXECUTED0) {
        
/* should be closed first */
        
if (SQLFreeStmt_(stmt, SQL_CLOSE) == SQL_ERROR)
            
return SQL_ERROR;
    }

    
/* Ready to destroy the stmt handle */
    destroyODBCStmt(stmt);
    
return SQL_SUCCESS;
}


SQLFreeStmt

SQLFreeStmt_(ODBCStmt 
*stmt, SQLUSMALLINT option)
{
    
switch (option) {
    
case SQL_CLOSE:
        
/* Note: this option is also called from SQLCancel() and
           SQLCloseCursor(), so be careful when changing the code 
*/
        
/* close cursor, discard result set, set to prepared */
        setODBCDescRecCount(stmt
->ImplRowDescr, 0);
        stmt
->currentRow = 0;
        stmt
->startRow = 0;
        stmt
->rowSetSize = 0;

        
if (stmt->State == EXECUTED0)
            stmt
->State = stmt->queryid >= 0 ? PREPARED0 : INITED;
        
else if (stmt->State >= EXECUTED1)
            stmt
->State = stmt->queryid >= 0 ? PREPARED1 : INITED;

        
/* Important: do not destroy the bind parameters and columns! */
        
return SQL_SUCCESS;
    
case SQL_DROP:
        
return ODBCFreeStmt_(stmt);
    
case SQL_UNBIND:
        setODBCDescRecCount(stmt
->ApplRowDescr, 0);
        
return SQL_SUCCESS;
    
case SQL_RESET_PARAMS:
        setODBCDescRecCount(stmt
->ApplParamDescr, 0);
        setODBCDescRecCount(stmt
->ImplParamDescr, 0);
        mapi_clear_params(stmt
->hdl);
        
return SQL_SUCCESS;
    
default:
        
/* Invalid attribute/option identifier */
        addStmtError(stmt, 
"HY092", NULL, 0);
        
return SQL_ERROR;
    }

    
/* not reached */
}

SQLHSTMT的結(jié)構(gòu)
typedef 
struct tODBCDRIVERSTMT {
    
/* Stmt properties */
    
int Type;        /* structure type, used for handle validy test */
    ODBCError 
*Error;    /* pointer to an Error object or NULL */
    
int RetrievedErrors;    /* # of errors already retrieved by SQLError */
    ODBCDbc 
*Dbc;        /* Connection context */
    
struct tODBCDRIVERSTMT *next;    /* the linked list of stmt's in this Dbc */
    
enum StatementState State;    /* needed to detect invalid cursor state */
    MapiHdl hdl;

    unsigned 
int rowcount;    /* # affected rows */

    
/* startRow is the row number of first row in the result
       set (0 based); rowSetSize is the number of rows in the
       current result set; currentRow is the row number of the
       current row within the current result set 
*/
    unsigned 
int currentRow;
    unsigned 
int startRow;
    unsigned 
int rowSetSize;

    unsigned 
int currentCol; /* used by SQLGetData() */
    SQLINTEGER retrieved;    
/* amount of data retrieved */
    
int queryid;        /* the query to be executed */
    
int nparams;        /* the number of parameters expected */

    
int querytype;        /* query type as returned by server */

    SQLUINTEGER cursorType;
    SQLUINTEGER cursorScrollable;
    SQLUINTEGER retrieveData;
    SQLUINTEGER noScan;

    ODBCDesc 
*ApplRowDescr;    /* Application Row Descriptor (ARD) */
    ODBCDesc 
*ApplParamDescr; /* Application Parameter Descriptor (APD) */
    ODBCDesc 
*ImplRowDescr;    /* Implementation Row Descriptor (IRD) */
    ODBCDesc 
*ImplParamDescr; /* Implementation Parameter Descriptor (IPD) */

    ODBCDesc 
*AutoApplRowDescr; /* Auto-allocated ARD */
    ODBCDesc 
*AutoApplParamDescr; /* Auto-allocated APD */

    
/* Stmt children: none yet */
} ODBCStmt;






posted on 2008-09-11 11:31 r2100 閱讀(1167) 評(píng)論(2)  編輯 收藏 引用

Feedback

# re: http://msdn.microsoft.com/en-us/library/ms716303(VS.85).aspx 2008-09-11 11:32 r2100
但是一直沒有找到實(shí)例,郁悶  回復(fù)  更多評(píng)論
  

# re: http://msdn.microsoft.com/en-us/library/ms716303(VS.85).aspx 2009-01-28 18:01 張三
安裝不成。。。  回復(fù)  更多評(píng)論
  


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产香蕉久久精品综合网| 麻豆九一精品爱看视频在线观看免费| 蜜月aⅴ免费一区二区三区| 先锋a资源在线看亚洲| 亚洲欧美第一页| 性欧美长视频| 乱中年女人伦av一区二区| 久久噜噜噜精品国产亚洲综合| 久久久久国产精品一区二区| 久久蜜桃香蕉精品一区二区三区| 老司机精品福利视频| 欧美精品自拍偷拍动漫精品| 欧美性大战久久久久| 国产视频精品xxxx| 亚洲精品午夜| 午夜亚洲伦理| 欧美va亚洲va国产综合| 99精品99久久久久久宅男| 欧美一级视频一区二区| 欧美国产亚洲精品久久久8v| 国产精品一级| 亚洲人成在线观看| 久久爱另类一区二区小说| 亚洲大胆人体在线| 欧美激情成人在线| 亚洲午夜久久久久久尤物| 久久亚洲影音av资源网| 国产精品久久久久高潮| 亚洲国产精品一区二区久| 亚洲欧美日本精品| 亚洲第一区在线| 亚洲欧美日韩在线一区| 免费视频久久| 国产一区三区三区| 亚洲免费一级电影| 亚洲国产精品久久久久婷婷老年| 亚洲一区日本| 欧美日韩精品欧美日韩精品 | 欧美久久九九| 今天的高清视频免费播放成人| 亚洲愉拍自拍另类高清精品| 欧美黑人国产人伦爽爽爽| 午夜在线电影亚洲一区| 欧美日韩亚洲一区二| 亚洲二区免费| 久久久免费精品| 亚洲一区图片| 国产精品久久久久9999高清| 欧美亚洲成人免费| 亚洲国产另类精品专区| 亚洲图片自拍偷拍| 亚洲国产三级| 日韩视频第一页| 亚洲精品日韩激情在线电影| 久久电影一区| 国产精品专区一| 亚洲免费一级电影| 一区二区三区毛片| 欧美三区视频| 亚洲午夜小视频| 日韩一区二区久久| 欧美人与性禽动交情品| 亚洲精品久久嫩草网站秘色| 亚洲第一区中文99精品| 欧美第一黄色网| 亚洲精品字幕| 亚洲精选视频在线| 欧美日韩三级视频| 亚洲欧美国产精品专区久久| 亚洲欧美国产制服动漫| 国产精品综合av一区二区国产馆| 欧美在线国产精品| 欧美一区二区三区视频在线观看| 国产日本欧美一区二区三区| 久久久久免费观看| 鲁大师成人一区二区三区| 亚洲毛片av| 亚洲午夜电影在线观看| 国产午夜一区二区三区| 欧美α欧美αv大片| 欧美国产日韩一区二区三区| 一区二区三区精密机械公司| 中日韩高清电影网| 国产亚洲精品久| 欧美丰满高潮xxxx喷水动漫| 欧美精品综合| 欧美制服第一页| 美女国产一区| 午夜激情亚洲| 久久三级福利| 亚洲午夜高清视频| 久久精品国产综合| 一个色综合av| 久久激情网站| 中文日韩在线视频| 久久精品国产亚洲精品| 亚洲精品中文字幕在线| 午夜日本精品| 一本久道久久综合中文字幕| 亚洲欧美资源在线| 日韩亚洲综合在线| 欧美影院一区| 亚洲综合99| 久久久亚洲午夜电影| 亚洲一区二区三区涩| 亚洲精品一区二区三区樱花| 欧美性大战久久久久久久蜜臀| 免费一级欧美片在线播放| 欧美日韩中国免费专区在线看| 欧美韩日一区二区| 在线亚洲美日韩| 欧美一级日韩一级| 欧美暴力喷水在线| 欧美亚洲专区| 欧美精品三级日韩久久| 久久久久久电影| 欧美四级伦理在线| 亚洲电影av| 国产午夜精品视频| 一区二区三区黄色| 日韩亚洲欧美一区二区三区| 久久久久久亚洲精品杨幂换脸 | 国产亚洲成精品久久| 日韩午夜在线观看视频| 亚洲黄色免费| 麻豆精品在线观看| 欧美成人激情视频| 狠狠久久亚洲欧美专区| 午夜在线视频一区二区区别| 亚洲女ⅴideoshd黑人| 欧美理论片在线观看| 亚洲国产精品小视频| 91久久综合亚洲鲁鲁五月天| 久久人人精品| 欧美ed2k| 亚洲人成网站色ww在线| 猛男gaygay欧美视频| 欧美高清视频一区| 尤物在线精品| 快播亚洲色图| 欧美成人四级电影| 最新国产拍偷乱拍精品 | 亚洲欧美日韩综合| 久久精品国产91精品亚洲| 国产一区二区三区四区五区美女| 亚洲在线日韩| 久久免费黄色| 亚洲韩国精品一区| 欧美精品成人一区二区在线观看| 亚洲精品日韩欧美| 亚洲午夜在线观看| 国产精品青草久久久久福利99| 亚洲在线日韩| 美女免费视频一区| 亚洲日本成人在线观看| 欧美日韩亚洲综合一区| 亚洲影视在线| 久久影院午夜论| 亚洲国产成人av在线| 欧美久久久久免费| 亚洲欧美国产日韩天堂区| 免费观看成人www动漫视频| 亚洲精品一区在线观看香蕉| 欧美日韩亚洲综合一区| 性欧美精品高清| 欧美激情女人20p| 亚洲一级电影| 伊人精品在线| 欧美亚洲成人免费| 老司机午夜免费精品视频| 91久久久久久久久| 亚欧美中日韩视频| 久久久久久综合| 欧美顶级大胆免费视频| 一区二区欧美精品| 久久精品在线| 亚洲美女精品久久| 国产亚洲毛片在线| 欧美日韩成人在线播放| 久久国产手机看片| 99这里只有精品| 男女精品网站| 欧美中文字幕在线视频| 亚洲精品日韩一| 国产亚洲精品自拍| 欧美性大战久久久久久久蜜臀| 久久免费精品日本久久中文字幕| 亚洲伦伦在线| 欧美成人综合在线| 欧美制服丝袜| 亚洲综合日韩在线| 亚洲精品国久久99热| 国产视频欧美视频| 欧美午夜视频网站| 欧美大片在线观看| 久久久综合精品| 欧美综合国产| 亚洲欧美国产77777| 宅男噜噜噜66一区二区| 亚洲国产精品视频一区|