亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 用visual c++開發(fā)數據庫應用程序.txt

?? 用Visual C++開發(fā)數據庫應用程序包括源程序和注釋
?? TXT
?? 第 1 頁 / 共 4 頁
字號:
SQLDisconnect(hdbc);

}

SQLFreeHandle(SQL_HANDLE_DBC, hdbc); 

} 

}

SQLFreeHandle(SQL_HANDLE_ENV, henv);

SQLDriveConnect


函數SQLDriveConnect用一個連接字符串建立至數據源的連接。它可以提供比SQLConnect函數的三個參數更多的信息,可以讓用戶輸入必要的連接信息。

如果連接建立,該函數返回完整的字符串,應用程序可使用該連接字符串建立另外的連接。

函數格式:

SQLRETURN SQLDriverConnect(SQLHDBC ConnectionHandle,SQLHWND WindowHandle,SQLCHAR InConnectionString,SQLSMALLINT StringLength1,SQLCHAR OutConnetionString,SQLSMALLINT BufferLength,SQLSMALLINT *StringLength2Ptr,SQLSMALLINT DriverCompletion); 

參數:

ConnectionHandle 連接句柄

WindowHandle 窗口句柄,應用程序可以用父窗口的句柄,或用NULL指針

InConnectionString 連接字符串長度

OutConnectionString 一個指向連接字符中的指針

BufferLength 存放連接字符串的緩沖區(qū)的長度

StringLength2Ptr 返回的連接字符串中的字符數

DriverCompletion 額外連接信息,可能取值有:SQL_DRIVER_PROMPT,

SQL_DRIVER_COMPLETE, 

SQL_DRIVER_COMPLETE_REQUIRED, or

SQL_DRIVER_NOPROMPT.

返回值:

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, or SQL_INVALID_HANDLE.

成功返回SQL_SUCCESS,如果返回值為SQL_ERROR或SQL_SUCCESS_WITH_INFO,可以用函數SQLGetDiagRec獲取相應SQLSTATE的值。 

SQLBrowseConnect

函數SQLBrowseConnect支持以一種迭代的方式獲取到數據源的連接,直到最后建立連接。它是基于客房機/服務器的體系結構,因此,本地數據庫不支持該函數。

一般,我們提供部分連接信息,如果足以建立到數據源的連接,則成功建立連接,否則返回SQL__NEED__DATA,并在OutConnectionString參數中返回所需要的信息。

函數格式:

SQLRETURN SQLBrowseConnect(SQLHDBC ConnectionHandle,SQLCHAR* InConnectionString,SQLSAMLLINT StringLength1,SQLCHAR* OutConnectionString,SQLSMALLINT BufferLength,SQLSMALLINT *StringLength2Ptr); 

參數:

ConnectionHandle 連接句柄

InConnectionString 指向輸出字符串的指針

StringLength1 輸出字符串的指針長度

OutConnectionString 指向輸出字符串的指針

BufferLength 用于存放輸出字符串的緩沖區(qū)的長度

StringLength2Ptr 實際返回的字符串的長度 

返回值:

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, or SQL_INVALID_HANDLE. 

成功返回SQL_SUCCESS,如果返回值為SQL_ERROR或SQL_SUCCESS_WITH_INFO,可以用函數SQLGetDiagRec獲取相應SQLSTATE的值。 

下面的代碼講述了如何使用ODBC API的SQLBrowseConnect函數建立同數據源的連接。 

#define BRWS_LEN 100SQLHENV 

henv;SQLHDBC hdbc;

SQLHSTMT hstmt;

SQLRETURN retcode;

SQLCHAR szConnStrIn[BRWS_LEN], szConnStrOut[BRWS_LEN];

SQLSMALLINT cbConnStrOut;/* Allocate the environment handle. */

retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); 

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {

/* Set the version environment attribute. */

retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, 0);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {

/* Allocate the connection handle. */

retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {

/* Call SQLBrowseConnect until it returns a value other than */

/* SQL_NEED_DATA (pass the data source name the first time). */

/* If SQL_NEED_DATA is returned, call GetUserInput (not */

/* shown) to build a dialog from the values in szConnStrOut. */

/* The user-supplied values are returned in szConnStrIn, */

/* which is passed in the next call to SQLBrowseConnect. */

lstrcpy(szConnStrIn, "DSN=Sales"); do {

retcode = SQLBrowseConnect(hdbc, szConnStrIn, SQL_NTS,

szConnStrOut, BRWS_LEN, &cbConnStrOut);

if (retcode == SQL_NEED_DATA)

GetUserInput(szConnStrOut, szConnStrIn);

} while (retcode == SQL_NEED_DATA);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){

/* Allocate the statement handle. */

retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {

/* Process data after successful connection */ ...;

SQLFreeHandle(SQL_HANDLE_STMT, hstmt); }

SQLDisconnect(hdbc); } }

SQLFreeHandle(SQL_HANDLE_DBC, hdbc); }}

SQLFreeHandle(SQL_HANDLE_ENV, henv);

   

 



2.24 SQL操作

構造和執(zhí)行SQL語句

構造SQL語句

可以通過三種方式構造SQL語句:在程序開發(fā)階段確定、在運行時確定或由用戶輸入SQL語句。

在程序開發(fā)時確定的SQL語句,具有易于實現(xiàn)、且可在程序編碼時進行測試的優(yōu)勢。

在程序運行時確定SQL語句提供了極大靈活性,但給程序高度帶來了困難,且需更多的處理時間。由用戶輸入的SQL語句,極大的增強了程序的功能,但是,程序必須提供友好的人機界面,且對用戶輸入的語句執(zhí)行一定程序的語法檢查,能夠報告用戶錯誤。

執(zhí)行SQL語句

應用程序的絕大部分數據庫訪問工作都是通過執(zhí)行SQL語句完成的,在執(zhí)行SQL語句之前,必須要先分配一個語句句柄,然后設置相應語句的語句屬性,再執(zhí)行SQL語句。當一個語句句柄使用完成后,調用函數SQLFreeHandle()釋放該句柄。


SQLExecute() 

SQLExecute用于執(zhí)行一個準備好的語然,當語句中有參數時,用當前綁定的參數變量的值。

函數格式:

SQLRETURN SQLExecute(SQLHSTMT StatementHandle);

參數:

StatementHandle 標識執(zhí)行SQL語句的句柄,可以用SQLAllocHandle()來獲得。

返回值:

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_NO_DATA, or SQL_INVALID_HANDLE

成功返回SQL_SUCCESS,如果返回值為SQL_ERROR或SQL_SUCCESS_WITH_INFO,可以用函數SQLGetDiagRec獲取相應SQLSTATE的值。 


SQLExecDiret() 

SQLExecDirect直接執(zhí)行SQL語句,對于只執(zhí)行一次的操作來說,該函數是速度最快的方法。

函數格式:

SQLRETURN SQLExecDirect(SQLHSTMT StatementHandle,SQLCHAR *StatementText,SQLINTEGER TextLength);

參數:

StatementHandle 語句句柄

StatementText 要執(zhí)行的SQL語然

StatementText SQL語句的長度。

返回值:

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_NO_DATA, or SQL_INVALID_HANDLE 

成功返回SQL_SUCCESS,如果返回值為SQL_ERROR或SQL_SUCCESS_WITH_INFO,可以用函數SQLGetDiagRec獲取相應SQLSTATE的值。 


SQLPripare() 

對于需多次執(zhí)行的SQL語句來說,除了使用SQLExecDirect函數之外,我們也可以在執(zhí)行SQL語句之前,先準備SQL語句的執(zhí)行。對于使用參數的語句,這可大提高程序執(zhí)行速度。

函數格式:

SQLRETURN SQLPrepare(SQLHSTMT StatementHandle,SQLCHAR* StatementText,SQLINTEGER TextLength); 

參數:

StatementHandle 語句句柄

StatementText 要執(zhí)行的SQL語然

StatementText SQL語句的長度。

返回值:

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_NO_DATA, or SQL_INVALID_HANDLE

成功返回SQL_SUCCESS,如果返回值為SQL_ERROR或SQL_SUCCESS_WITH_INFO,可以用函數SQLGetDiagRec獲取相應SQLSTATE的值。 

使用參數

使用參數可以使一條SQL語句多次執(zhí)行,得到不同結果

SQLBindParameter

函數SQLBindParameter負責為參數定義變量,實現(xiàn)參數值的傳遞。

函數格式如下:

SQLRETURNSQLBindParameter(SQLHSTMT StatementHandle,SQLUSMALLINT ParameterNumber,SQLSMALLINT InputOutputType,SQLSMALLINT ValueType,SQLSMALLINT ParameterType,SQLUINTEGER ColumnSize,SQLSMALLINT DecimalDigits,SQLPOINTER ParameterValuePtr,SQLINTEGER BufferLength,SQLINTEGER *StrLen_or_IndPtr); 

參數:

StatementHandle 語句句柄

ParameterNumber 綁定的參數在SQL語句中的序號,在SQL中,所有參數從左到右順序編號,從1開始。SQL語句執(zhí)行之前,應該為每個參數調用函數SQLBindParameter綁定到某個程序變量。

InputOutputType 參數類型,可為SQL_PARA_INPUT, SQL_PARAM_INPUT_OUTPUT, SQL_PARAM_OUTPUT。

ParameterType 參數數據類型

ColumnSIze 參數大小

DecimalDigits 參數精度

ParameterValutePtr 指向程序中存放參數值的緩沖區(qū)的指針

BufferLength 程序中存放參數值的緩沖區(qū)的字節(jié)數

StrLen_or_IndPtr 指向存放參數ParameterValuePtr的緩沖區(qū)指針

返回值:

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, or SQL_INVALID_HANDLE

成功返回SQL_SUCCESS,如果返回值為SQL_ERROR或SQL_SUCCESS_WITH_INFO,可以用函數SQLGetDiagRec獲取相應SQLSTATE的值。

執(zhí)行時傳遞參數

對于某些文本文檔或位圖文件,要占用大量的存儲空間。因此,在數據源傳遞這些數據時,可以分開傳遞。有兩個函數可完成這個工作。

函數格式:

SQLRETURN SQLPutData(SQLHSTMT StatementHandle,

SQLPOINTER DataPtr,SQLINTEGER StrLen_or_Ind);

參數:

StatementHandle 參數句柄

DataPtr 指向包含實際數據的緩沖區(qū)指針。

StrLen_or_Lnd 緩沖區(qū)長度

返回值:

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, or SQL_INVALID_HANDLE

成功返回SQL_SUCCESS,如果返回值為SQL_ERROR或SQL_SUCCESS_WITH_INFO,可以用函數SQLGetDiagRec獲取相應SQLSTATE的值。

函數格式:

SQLRETURNSQLParamData(SQLHSTMT StatementHandle,SQLPOINTER *ValuePtrPtr);

參數:

StatementHandle 參數句柄

ValuePtrPtr 指向緩沖區(qū)地址的指針

返回值:

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, or SQL_INVALID_HANDLE

成功返回SQL_SUCCESS,如果返回值為SQL_ERROR或SQL_SUCCESS_WITH_INFO,可以用函數SQLGetDiagRec獲取相應SQLSTATE的值。  

下面的代碼展示如何使用這兩個函數

#define MAX_DATA_LEN 1024

SQLINTEGER cbPartID = 0, cbPhotoParam, cbData;

SQLUINTEGER sPartID; szPhotoFile;

SQLPOINTER pToken, InitValue;

SQLCHAR Data[MAX_DATA_LEN];

SQLRETURN retcode;

SQLHSTMT hstmt;

retcode = SQLPrepare(hstmt, "INSERT INTO PICTURES (PARTID, PICTURE) VALUES 

(?, ?)", SQL_NTS);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {

/* Bind the parameters. For parameter 2, pass */

/* the parameter number in ParameterValuePtr instead of a buffer */ 

/* address. */ SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_ULONG, 

SQL_INTEGER, 0, 0, &sPartID, 0, &cbPartID);

SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT,

SQL_C_BINARY, SQL_LONGVARBINARY,

0, 0, (SQLPOINTER) 2, 0, &cbPhotoParam);

/* Set values so data for parameter 2 will be */

/* passed at execution. Note that the length parameter in */

/* the macro SQL_LEN_DATA_AT_EXEC is 0. This assumes that */

/* the driver returns "N" for the SQL_NEED_LONG_DATA_LEN */

/* information type in SQLGetInfo. */

cbPhotoParam = SQL_LEN_DATA_AT_EXEC(0);

sPartID = GetNextID(); /* Get next available employee ID */

/* number. */ retcode = SQLExecute(hstmt);

/* For data-at-execution parameters, call SQLParamData to */

/* get the parameter number set by SQLBindParameter. */

/* Call InitUserData. Call GetUserData and SQLPutData */

/* repeatedly to get and put all data for the parameter. */

/* Call SQLParamData to finish processing this parameter */

while (retcode == SQL_NEED_DATA) {

retcode = SQLParamData(hstmt, &pToken);

if (retcode == SQL_NEED_DATA) {

InitUserData((SQLSMALLINT)pToken, InitValue);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区免费大片 | 亚洲精品在线观看网站| 日本在线播放一区二区三区| 日韩无一区二区| 麻豆精品一区二区av白丝在线| 日韩一二在线观看| 国产毛片精品视频| 国产精品久久一级| 欧美日韩免费视频| 久久精品国产99国产| 国产女主播视频一区二区| 9i在线看片成人免费| 亚洲bt欧美bt精品777| 精品乱人伦小说| 9色porny自拍视频一区二区| 午夜视频在线观看一区二区 | 国产福利视频一区二区三区| 中文字幕制服丝袜一区二区三区 | 国产精品三级视频| 欧美天堂亚洲电影院在线播放| 奇米影视7777精品一区二区| 久久综合九色综合97婷婷| 不卡一区在线观看| 日韩主播视频在线| 国产精品素人视频| 欧美伦理影视网| 成人av电影免费在线播放| 亚洲成人黄色影院| 国产精品少妇自拍| 欧美精品1区2区| 99精品国产99久久久久久白柏| 天天综合网 天天综合色| 国产亚洲va综合人人澡精品| 欧美在线视频日韩| 国产成a人无v码亚洲福利| 天堂va蜜桃一区二区三区漫画版| 久久久精品国产免大香伊 | 奇米精品一区二区三区在线观看一| 久久久天堂av| 欧美日韩成人综合在线一区二区| 国产91综合网| 麻豆成人免费电影| 亚洲国产日韩a在线播放| 中文在线一区二区| 精品国产一区a| 欧美狂野另类xxxxoooo| 暴力调教一区二区三区| 国产精品伊人色| 久久国产精品99精品国产| 亚洲影视在线播放| 国产精品国产精品国产专区不蜜| 欧美zozo另类异族| 91精品国产乱码| 精品视频色一区| av电影在线观看一区| 国产精品1区二区.| 九九九久久久精品| 日韩成人免费电影| 日本网站在线观看一区二区三区| 中文字幕亚洲电影| 国产精品婷婷午夜在线观看| 精品成人免费观看| 日韩一二三区视频| 6080午夜不卡| 欧美一区三区二区| 日韩欧美在线1卡| 制服丝袜av成人在线看| 欧美精品日韩精品| 欧美高清视频在线高清观看mv色露露十八| www.日本不卡| 99久久精品免费精品国产| 国产成人午夜99999| 国产99精品在线观看| 国产精品资源在线观看| 国产黄色精品网站| 成人激情免费网站| a4yy欧美一区二区三区| www.久久精品| 色综合久久久久综合体桃花网| 91亚洲国产成人精品一区二三| av电影在线观看不卡| 一本色道久久综合精品竹菊| 97精品久久久午夜一区二区三区| 99视频超级精品| 在线观看日韩精品| 91精品免费在线观看| 日韩一区二区三区电影在线观看| 欧美大胆人体bbbb| 久久久久久久久久久久久夜| 国产精品水嫩水嫩| 亚洲特黄一级片| 日韩精品1区2区3区| 精品一区二区精品| 成人h动漫精品一区二| www.欧美.com| 91.com在线观看| 2017欧美狠狠色| 中文字幕永久在线不卡| 亚洲影视在线观看| 激情六月婷婷久久| 91性感美女视频| 欧美一级艳片视频免费观看| 久久久精品免费免费| 亚洲欧美另类久久久精品| 午夜不卡在线视频| 国产精品自拍av| 欧美伊人久久久久久久久影院| 337p亚洲精品色噜噜狠狠| 久久久久久久久久美女| 一区二区久久久久| 久久国产尿小便嘘嘘| 成人18视频在线播放| 4438x成人网最大色成网站| 欧美激情艳妇裸体舞| 亚洲一线二线三线久久久| 久久成人羞羞网站| 99精品偷自拍| 精品国产3级a| 亚洲午夜在线观看视频在线| 国产在线不卡视频| 欧美日韩中文字幕一区| 久久久亚洲精华液精华液精华液| 亚洲精品少妇30p| 韩国毛片一区二区三区| 欧美中文字幕久久| 国产精品水嫩水嫩| 韩日av一区二区| 欧美男同性恋视频网站| 国产精品不卡一区二区三区| 理论电影国产精品| 欧美午夜电影在线播放| 亚洲国产成人午夜在线一区| 婷婷中文字幕一区三区| 91在线高清观看| 亚洲精品一区二区三区福利| 亚洲不卡一区二区三区| www.综合网.com| 国产日韩欧美精品一区| 日本麻豆一区二区三区视频| 色域天天综合网| 国产精品久久久久久久久快鸭 | 久久美女高清视频| 青草av.久久免费一区| 在线区一区二视频| 国产精品久久久久久久久免费桃花 | 色婷婷狠狠综合| 国产欧美精品日韩区二区麻豆天美| 日韩成人伦理电影在线观看| 在线视频你懂得一区二区三区| 久久久久久影视| 极品少妇xxxx精品少妇偷拍| 欧美猛男超大videosgay| 亚洲激情欧美激情| 99久久99久久精品免费观看| 国产日产欧产精品推荐色| 久久66热偷产精品| 欧美一区二区三区的| 日本成人在线电影网| 777欧美精品| 日本不卡一二三区黄网| 91超碰这里只有精品国产| 日韩二区在线观看| 日韩欧美一区二区视频| 久久国产综合精品| 亚洲精品在线三区| 国产高清在线观看免费不卡| 久久精品水蜜桃av综合天堂| 国产精品影视网| 欧美激情一区二区在线| 成人动漫在线一区| 亚洲色图在线看| 日本精品裸体写真集在线观看| 亚洲愉拍自拍另类高清精品| 在线观看免费亚洲| 日产国产欧美视频一区精品| 欧美一卡二卡在线观看| 韩国三级在线一区| 国产精品天天看| 在线观看日韩高清av| 天堂蜜桃91精品| 久久综合久色欧美综合狠狠| 国产精品亚洲午夜一区二区三区 | 丝袜美腿高跟呻吟高潮一区| 欧美一区二区国产| 国产精一区二区三区| 亚洲欧洲一区二区在线播放| 91在线视频播放地址| 亚洲午夜羞羞片| 精品日韩一区二区三区| 国产成人自拍高清视频在线免费播放| 国产精品久久久久久久久免费樱桃| 99这里都是精品| 午夜a成v人精品| 久久―日本道色综合久久| a4yy欧美一区二区三区| 日韩影视精彩在线| 国产喷白浆一区二区三区| 色哟哟亚洲精品| 国产在线精品不卡| 一区二区三区中文字幕电影|