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

r2100

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

常用鏈接

留言簿(3)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

SQLExecDirect函數源代碼
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的結構
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 閱讀(1159) 評論(2)  編輯 收藏 引用

Feedback

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

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

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            99视频+国产日韩欧美| 国产欧美日本一区二区三区| 黑人操亚洲美女惩罚| 亚洲欧美日本另类| 亚洲国产一区二区三区在线播 | 欧美va日韩va| 欧美高清自拍一区| 亚洲在线成人精品| 午夜精品久久久久久99热软件| 国产日产高清欧美一区二区三区| 久久精品国产亚洲a| 欧美激情一区二区三区全黄| 亚洲欧美一区二区激情| 久久婷婷国产综合精品青草| 一区二区毛片| 久久综合九色综合欧美就去吻| 99热在线精品观看| 欧美一区日韩一区| 亚洲直播在线一区| 欧美精品一区在线发布| 久久香蕉国产线看观看av| 欧美精品电影| 欧美激情一区| 亚洲另类春色国产| 免费成人av资源网| 欧美高清在线一区二区| 国产综合色产在线精品| 欧美亚洲一区三区| 亚洲成人在线| 欧美一区视频在线| 久久久综合网站| 韩国久久久久| 久久久亚洲人| 亚洲第一免费播放区| 亚洲福利视频二区| 欧美国产在线视频| aa级大片欧美| 欧美在线免费视频| 极品尤物久久久av免费看| 亚洲欧美日韩精品综合在线观看| 欧美一区二区三区电影在线观看| 国产精品毛片在线| 久久国产日韩| 亚洲人午夜精品免费| 亚洲欧美日韩天堂一区二区| 国产精品视频区| 欧美成人日本| 亚洲欧美美女| 亚洲精品视频免费| 久久久噜噜噜久久中文字免| 亚洲欧洲美洲综合色网| 国产精品久线观看视频| 欧美激情第3页| 久久国产婷婷国产香蕉| 亚洲日本成人| 亚洲国产va精品久久久不卡综合| 亚洲欧美激情诱惑| 欧美日韩午夜视频在线观看| 欧美 日韩 国产一区二区在线视频 | 久久青青草原一区二区| 99热免费精品在线观看| 欧美国产丝袜视频| 久久久久九九九| 午夜视频在线观看一区二区三区| 亚洲精品久久在线| 亚洲国产精品一区二区www| 国产一区二区三区四区在线观看| 欧美日本高清| 欧美日韩一区二区精品| 欧美日韩第一区| 欧美日韩免费| 国产精品理论片| 国产精品一区视频| 精品99一区二区三区| 国产亚洲欧美日韩一区二区| 国产一区二区三区高清播放| 国产日产高清欧美一区二区三区| 国产日韩欧美一区| 亚洲国产免费看| 亚洲女爱视频在线| 久久久亚洲精品一区二区三区| 久久婷婷国产综合国色天香| 裸体一区二区三区| 亚洲国产你懂的| 午夜视频在线观看一区| 久久久精品一区二区三区| 亚洲新中文字幕| 亚洲欧美www| 免费亚洲一区| 国产日韩欧美中文在线播放| 亚洲国产日日夜夜| 欧美亚洲一级片| 亚洲精品乱码视频| 久久久高清一区二区三区| 欧美精品一区二区高清在线观看| 国产欧美一区二区三区另类精品| 亚洲青涩在线| 欧美国产精品人人做人人爱| 中国成人在线视频| 欧美三级中文字幕在线观看| 91久久久在线| 欧美黄色aa电影| 蜜臀av一级做a爰片久久| 国产一区99| 久久久久久久久综合| 午夜亚洲激情| 国产欧美日韩高清| 久久精品伊人| 久久不射中文字幕| 一区二区三区在线观看国产| 久久精品夜色噜噜亚洲aⅴ| 午夜在线成人av| 国内精品国产成人| 欧美a级片一区| 欧美国产另类| 99re视频这里只有精品| 亚洲精品免费在线播放| 国产精品扒开腿做爽爽爽视频| 中文高清一区| 欧美在线精品免播放器视频| 欧美日韩视频在线观看一区二区三区| 亚洲国产清纯| 亚洲视频欧洲视频| 国产日韩一区二区三区在线播放 | 99riav1国产精品视频| 欧美性视频网站| 久久免费视频网| 欧美久久婷婷综合色| 久久av一区二区三区亚洲| 六月婷婷一区| 久久国产精品99精品国产| 欧美国产欧美亚洲国产日韩mv天天看完整 | 国产人成精品一区二区三| 亚洲欧洲日韩女同| 国产专区一区| 性色av一区二区三区红粉影视| 亚洲夫妻自拍| 久久久青草青青国产亚洲免观| 亚洲性夜色噜噜噜7777| 蜜臀91精品一区二区三区| 一区二区在线视频| 亚洲欧洲在线观看| 91久久精品www人人做人人爽| 亚洲伊人久久综合| 亚洲欧美在线播放| 国产精品你懂得| 新67194成人永久网站| 亚洲天堂av高清| 欧美午夜电影在线| 一区二区三区欧美成人| 亚洲一区二区三区视频| 欧美色大人视频| 亚洲女优在线| 久久婷婷蜜乳一本欲蜜臀| 狠狠色伊人亚洲综合网站色| 久久精品在线免费观看| 欧美激情一二三区| 亚洲欧美经典视频| 国产一区二区| 欧美精品一区三区在线观看| 亚洲特色特黄| 麻豆精品视频| 亚洲香蕉网站| 永久久久久久| 欧美日韩精品在线视频| 亚洲一区国产| 亚洲精品免费网站| 久久久久久久久一区二区| 国产精品多人| 女主播福利一区| 欧美一级片在线播放| 亚洲精品欧美日韩专区| 久久精品国内一区二区三区| 99成人在线| 伊人久久噜噜噜躁狠狠躁| 国产精品福利在线观看网址| 卡通动漫国产精品| 久久精品视频免费观看| 99视频+国产日韩欧美| 亚洲欧美国产毛片在线| 99精品视频免费观看视频| 伊甸园精品99久久久久久| 国内精品久久久久久| 国产欧美一区二区三区久久人妖| 欧美精品免费视频| 欧美韩日精品| 欧美精品一区在线| 欧美日韩在线一区二区三区| 欧美高清视频在线播放| 欧美黄色成人网| 欧美精品在线观看91| 欧美午夜片在线观看| 国产精品嫩草久久久久| 国产欧美91| 亚洲高清免费在线| 亚洲精品欧美日韩专区| 亚洲色在线视频| 久久久久www| 亚洲国产精品一区二区三区| 99热在线精品观看|