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

r2100

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

常用鏈接

留言簿(3)

我參與的團(tuán)隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

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 閱讀(1159) 評論(2)  編輯 收藏 引用

Feedback

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

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


只有注冊用戶登錄后才能發(fā)表評論。
網(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>
            中日韩午夜理伦电影免费| 欧美美女福利视频| 亚洲成人在线网| 久久天堂精品| 蜜臀99久久精品久久久久久软件| 欧美在线观看一区二区| 国产精品日产欧美久久久久| 国产精品久久久一区二区三区| 国产精品久久一卡二卡| 国产亚洲免费的视频看| 精品51国产黑色丝袜高跟鞋| 亚洲国产mv| 亚洲影院在线| 久久久精品视频成人| 欧美国产日韩精品| 亚洲深夜影院| 久久久亚洲成人| 欧美日韩国产成人| 国产视频在线观看一区二区三区 | 99国产精品国产精品久久| 亚洲精品乱码久久久久久日本蜜臀| 亚洲国产一二三| 亚洲一二三区在线| 久久免费视频在线| 欧美日在线观看| 国产亚洲精品久久飘花| 亚洲另类春色国产| 欧美在线播放高清精品| 亚洲国产日韩欧美在线99| 亚洲一二三区视频在线观看| 久久久亚洲高清| 国产精品多人| 91久久久久久久久久久久久| 欧美亚洲专区| 亚洲精品免费在线播放| 亚洲欧美日韩另类| 欧美激情在线播放| 黄色日韩网站| 欧美一区二区三区啪啪| 亚洲三级观看| 美脚丝袜一区二区三区在线观看| 国产精品一区二区三区观看| 亚洲理论电影网| 久久婷婷久久| 午夜天堂精品久久久久| 欧美日韩美女| 亚洲精品在线视频| 欧美高清不卡在线| 久久久亚洲一区| 国产日韩精品久久久| 99精品欧美一区二区蜜桃免费| 狂野欧美一区| 久久精品一级爱片| 国产视频精品xxxx| 欧美专区福利在线| 亚洲女爱视频在线| 国产精品成人国产乱一区| 日韩午夜激情av| 亚洲国产高清一区二区三区| 久久米奇亚洲| 国内精品久久久久久影视8| 国产精品久久午夜| 亚洲欧美日韩在线观看a三区| 亚洲欧洲精品一区二区三区不卡 | 中日韩高清电影网| 亚洲国产精品高清久久久| 久久久在线视频| 尹人成人综合网| 欧美高清影院| 欧美激情一区二区三区蜜桃视频| 亚洲精品免费一区二区三区| 欧美激情一区二区三区在线| 蜜桃av一区二区三区| 最新高清无码专区| 亚洲精品少妇30p| 欧美日韩免费观看一区| 亚洲一区高清| 午夜一区二区三区在线观看| 国内精品视频一区| 欧美丰满少妇xxxbbb| 欧美精品三级| 先锋影音网一区二区| 欧美在线二区| 亚洲国产一区在线| 亚洲美女淫视频| 国产裸体写真av一区二区| 久久天天狠狠| 欧美激情一区在线| 欧美一区二区三区电影在线观看| 欧美一区二区三区在| 1204国产成人精品视频| 亚洲国产婷婷香蕉久久久久久99| 欧美日韩亚洲综合| 久久夜色撩人精品| 欧美日韩免费一区二区三区| 欧美中文字幕视频| 欧美韩日精品| 久久精彩免费视频| 欧美成人在线免费观看| 午夜精品美女久久久久av福利| 久久xxxx精品视频| 夜夜嗨av色一区二区不卡| 欧美一级播放| 夜夜爽99久久国产综合精品女不卡| 亚洲午夜av电影| 亚洲福利视频一区| 亚洲综合三区| 夜夜精品视频| 久久亚洲国产成人| 午夜精品久久久久久久蜜桃app| 久久米奇亚洲| 午夜久久电影网| 欧美国产激情| 久久亚洲春色中文字幕| 欧美色精品天天在线观看视频 | 欧美精品麻豆| 久久一区中文字幕| 国产精品二区影院| 亚洲国产欧美一区二区三区久久 | 午夜日韩视频| 宅男在线国产精品| 久久蜜桃香蕉精品一区二区三区| 亚洲影院免费| 欧美精品在线视频| 欧美成人免费小视频| 国产欧美一区二区视频| 日韩视频在线一区| 亚洲毛片av| 老司机久久99久久精品播放免费| 欧美亚洲免费电影| 国产精品视频内| 亚洲午夜av电影| 亚洲欧美日韩一区在线观看| 欧美日韩精品欧美日韩精品| 欧美激情精品久久久久久黑人| 狠狠色综合色区| 欧美在线视频不卡| 久久久午夜电影| 国产亚洲欧洲| 久久国产精品一区二区三区四区| 欧美在线精品免播放器视频| 国产精品社区| 午夜免费日韩视频| 久久青青草原一区二区| 国内在线观看一区二区三区| 欧美中文字幕在线观看| 久久免费少妇高潮久久精品99| 国产一区二区三区精品欧美日韩一区二区三区| 亚洲一区免费网站| 久久精品成人| 一区二区亚洲精品国产| 久久综合色天天久久综合图片| 欧美黄色视屏| 艳女tv在线观看国产一区| 欧美色欧美亚洲另类七区| 亚洲综合色自拍一区| 久久久国产精品一区二区三区| 激情综合五月天| 欧美大片在线看| 亚洲午夜小视频| 久久字幕精品一区| 亚洲精品资源美女情侣酒店| 国产精品r级在线| 久久国产色av| 亚洲国产cao| 亚洲欧美一级二级三级| 黄色日韩网站视频| 欧美精品日韩精品| 欧美亚洲在线观看| 亚洲国产精品欧美一二99| 宅男噜噜噜66一区二区| 国产一区二区你懂的| 欧美搞黄网站| 欧美在线一二三区| 日韩午夜在线| 玖玖在线精品| 亚洲欧美日本在线| 亚洲黄色在线| 国产日韩欧美高清| 欧美精品在线播放| 久久成人精品视频| 99视频精品全部免费在线| 欧美在线观看www| 亚洲伦伦在线| 狠狠色丁香婷婷综合| 欧美日韩综合视频| 久久先锋影音| 亚洲欧美另类中文字幕| 99国产精品视频免费观看一公开| 国产欧美日本| 欧美日韩成人网| 久久久免费精品| 亚洲伊人伊色伊影伊综合网| 欧美freesex8一10精品| 性视频1819p久久| 一本大道久久精品懂色aⅴ| 激情五月***国产精品| 国产精品亚洲综合| 欧美日本在线一区| 老司机午夜免费精品视频|