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

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>
            亚洲在线一区二区| 亚洲黄色大片| 亚洲电影在线看| 久久在线播放| 美日韩免费视频| 日韩一区二区精品视频| aⅴ色国产欧美| 国产精品人人做人人爽| 欧美与黑人午夜性猛交久久久| 午夜欧美理论片| 伊人久久久大香线蕉综合直播| 欧美国产日韩一区| 欧美日韩久久| 久久高清国产| 免费观看成人www动漫视频| 亚洲精品1区| 中文亚洲欧美| 狠狠久久综合婷婷不卡| 最新69国产成人精品视频免费 | 久久久久欧美精品| 男人的天堂亚洲| 性欧美办公室18xxxxhd| 久久九九全国免费精品观看| 亚洲免费观看高清完整版在线观看熊 | 亚洲五月六月| 久久久精品五月天| 中文av一区二区| 欧美在线免费| 亚洲午夜久久久久久久久电影院| 亚洲自拍三区| 日韩视频专区| 久久女同精品一区二区| 亚洲图片你懂的| 久久在线免费| 欧美在线亚洲一区| 欧美日韩国产色视频| 麻豆成人91精品二区三区| 欧美性大战久久久久| 免费日韩av| 国产欧美一区二区三区在线看蜜臀| 欧美va天堂在线| 国产精品丝袜91| 日韩小视频在线观看专区| 在线播放中文一区| 香蕉av777xxx色综合一区| aaa亚洲精品一二三区| 久久蜜桃香蕉精品一区二区三区| 亚洲天堂久久| 欧美精品www| 欧美99久久| 在线精品福利| 欧美一区在线看| 欧美亚洲综合久久| 欧美午夜精品| 99re在线精品| 亚洲免费观看在线视频| 免费成人美女女| 女人香蕉久久**毛片精品| 国模一区二区三区| 亚洲综合社区| 香蕉免费一区二区三区在线观看 | 欧美一区二区三区四区在线观看| 欧美日韩激情小视频| 91久久久亚洲精品| 亚洲精品一区二区三区福利| 免费在线播放第一区高清av| 欧美成人综合网站| 亚洲激情在线激情| 欧美高清在线视频| 夜夜爽夜夜爽精品视频| 亚洲无线视频| 国产精品丝袜xxxxxxx| 亚洲一级在线观看| 欧美一区永久视频免费观看| 国产一区成人| 久久亚洲影音av资源网| 亚洲国产mv| 一个色综合av| 国产精品日韩在线观看| 午夜精品福利在线观看| 久久婷婷国产综合国色天香| 亚洲第一天堂av| 欧美极品aⅴ影院| 亚洲一级免费视频| 久久久999精品免费| 狠狠色丁香久久婷婷综合_中| 欧美在线视频免费| 久久米奇亚洲| 99在线|亚洲一区二区| 欧美人与性动交α欧美精品济南到| 亚洲高清影视| 一本色道久久综合亚洲精品不卡| 欧美精品久久久久久久| 亚洲精品欧洲| 中文日韩在线视频| 国产精品免费看| 香蕉久久a毛片| 麻豆国产精品va在线观看不卡| 伊人成人在线视频| 欧美激情按摩在线| 欧美一区在线视频| 免费观看日韩| 夜夜夜久久久| 国产精品亚洲视频| 久久成人免费网| 久久精品视频在线看| 亚洲国产成人在线| 欧美日韩一区二区国产| 亚洲欧美另类久久久精品2019| 久久久久久九九九九| 在线视频观看日韩| 国产精品欧美日韩久久| 久久精品一区二区三区四区 | 影音先锋久久资源网| 男人插女人欧美| 亚洲欧美不卡| 亚洲电影视频在线| 午夜精品视频网站| 国产精品久久网站| 麻豆精品视频在线| 亚洲午夜日本在线观看| 久久午夜激情| 亚洲在线观看| 亚洲国产精品电影| 欧美成年人视频网站| 久久另类ts人妖一区二区| 韩国成人精品a∨在线观看| 欧美成人有码| 久久精品二区三区| 一区二区三区产品免费精品久久75 | 免费日韩av| 久久精品99久久香蕉国产色戒| 亚洲精品视频一区| 久久gogo国模裸体人体| 性色av一区二区三区| 亚洲六月丁香色婷婷综合久久| 国产日韩在线看片| 欧美日韩影院| 欧美国产欧美亚洲国产日韩mv天天看完整 | 国产精品videosex极品| 欧美插天视频在线播放| 麻豆91精品| 久久9热精品视频| 亚洲一区在线免费| 日韩系列欧美系列| 亚洲激情一区二区| 性欧美大战久久久久久久免费观看| 亚洲无线视频| 一区二区三区|亚洲午夜| 亚洲国产高清自拍| 在线观看欧美黄色| 海角社区69精品视频| 欧美视频在线不卡| 国产精品久久一卡二卡| 欧美日韩一区二区三区四区在线观看| 毛片一区二区| 狼人社综合社区| 久久人人爽国产| 久久久精品动漫| 久久精品卡一| 亚洲视频axxx| 亚洲精品午夜| 狠狠爱综合网| 亚洲片国产一区一级在线观看| 国产欧美另类| 国产一区亚洲| 国外精品视频| 精品91免费| 亚洲国产一区二区a毛片| 一区二区视频在线观看| 在线成人h网| 亚洲日本成人| 一区二区三欧美| 亚洲午夜羞羞片| 中文日韩欧美| 美女视频一区免费观看| 欧美高清在线视频观看不卡| 亚洲承认在线| 夜夜嗨av一区二区三区四区| 亚洲视频中文| 玖玖综合伊人| 欧美片第一页| 国产欧美日韩在线| 亚洲丰满少妇videoshd| 亚洲精品麻豆| 欧美国内亚洲| 国产精品h在线观看| 国产午夜久久久久| 亚洲国产成人久久综合| 91久久久久久久久| 欧美专区在线观看| 欧美成人四级电影| 一区二区三区成人| 久久九九精品99国产精品| 久久精品国产77777蜜臀| 国产精品激情av在线播放| 精品不卡在线| 中文有码久久| 免费日韩成人| 在线亚洲观看|