<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      unixODBC編程(四)插入數據

      訪問www.tomcoding.com網站,學習Oracle內部數據結構,詳細文檔說明,下載Oracle的exp/imp,DUL,logminer,ASM工具的源代碼,學習高技術含量的內容。

      ODBC插入數據也有一定的步驟,我們先來看一下。

      1. 分配一個語句句柄,使用SQLAllocHandle()函數,句柄類型為SQL_HANDLE_STMT

      2. 準備語句,使用SQLPrepare()函數。

      3. 為綁定的變量賦值。

      4. 綁定輸入變量,使用SQLBindParameter()函數。

      5. 執行語句,使用SQLExecute()函數。

      6. 提交執行結果,使用SQLEndTran()函數。

      這里只有兩個新函數,SQLBindParameter()SQLEndTran()。看一下他們的原型和參數。

      綁定輸入變量函數。

      SQLRETURN SQLBindParameter(  
            SQLHSTMT           StatementHandle,  
            SQLUSMALLINT    ParameterNumber,  
            SQLSMALLINT      InputOutputType,  
            SQLSMALLINT      ValueType,  
            SQLSMALLINT      ParameterType,  
            SQLULEN             ColumnSize,  
            SQLSMALLINT     DecimalDigits,  
            SQLPOINTER       ParameterValuePtr,  
            SQLLEN                BufferLength,  
            SQLLEN *              StrLen_or_IndPtr);

      StatementHandle是一個輸入參數,語句句柄。

      ParameterNumber是一個輸入參數,參數編號,按遞增參數順序按順序排序,從 1 開始。

      InputOutputType是一個輸入參數,指示綁定的參數是輸入還是輸出,這里是SQL_PARAM_INPUT

      ValueType是一個輸入參數,指示綁定參數的 C 數據類型。參考下面的表。

      ParameterType是一個輸入參數,指示綁定參數的 SQL 數據類型。參考下面的表。

      ColumnSize是一個輸入參數,指示綁定參數列大小,即表的列長度。字符類型的列可以設置長度,其他類型會忽略。

      DecimalDigits是一個輸入參數,指示綁定參數標記的列的十進制數字位數。其他類型忽略。

      ParameterValuePtr是一個輸入參數,指向綁定參數數據的緩沖區的指針。

      BufferLength是一個輸入/輸出參數,指示ParameterValuePtr 緩沖區的長度(以字節為單位)。主要限制輸出的數據不要超出緩沖區。

      StrLen_or_IndPtr是一個輸入參數,指向綁定參數長度緩沖區的指針,用作輸入的數據長度或指示變量。

      ValueType類型對照表

      C 類型標識符

      ODBC C typedef

      C 類型

      SQL_C_CHAR

      SQLCHAR *

      unsigned char *

      SQL_C_WCHAR

      SQLWCHAR *

      wchar_t *

      SQL_C_SSHORT

      SQLSMALLINT

      short int

      SQL_C_USHORT

      SQLUSMALLINT

      unsigned short int

      SQL_C_SLONG

      SQLINTEGER

      long int

      SQL_C_ULONG

      SQLUINTEGER

      unsigned long int

      SQL_C_FLOAT

      SQLREAL

      FLOAT

      SQL_C_DOUBLE

      SQLDOUBLE、SQLFLOAT

      Double

      SQL_C_BIT

      SQLCHAR

      unsigned char

      SQL_C_STINYINT

      SQLSCHAR

      signed char

      SQL_C_UTINYINT[j]

      SQLCHAR

      unsigned char

      SQL_C_SBIGINT

      SQLBIGINT

      _int64

      SQL_C_UBIGINT

      SQLUBIGINT

      unsigned _int64

      SQL_C_BINARY

      SQLCHAR *

      unsigned char *

      事務提交函數。

      SQLRETURN SQLEndTran(
           SQLSMALLINT   HandleType,
           SQLHANDLE      Handle,
           SQLSMALLINT   CompletionType);

      HandleType是一個輸入參數,句柄類型標識符。 包含SQL_HANDLE_ENV(如果 Handle 是環境句柄 )或SQL_HANDLE_DBC(如果 Handle 是連接句柄)。

      Handle是一個輸入參數,HandleType 指示的類型句柄,指示事務的范圍。

      CompletionType是一個輸入參數,以下兩個值之一:SQL_COMMITSQL_ROLLBACK

      看一個實際的例子,在表中插入一條數據,表結構為:

       Name                                      Null?    Type
       ----------------------------------------- -------- ----------------------------
       ID                                        NOT NULL NUMBER
       F1                                                 VARCHAR2(100)
       F2                                                 VARCHAR2(200)
       F3                                                 VARCHAR2(200)
       F4                                                 VARCHAR2(200)

      插入語句為insert into test_tab1 (id, f1, f2, f3, f4) values (?, ?, ?, ?, ?),問號表示輸入參數,需要在后面綁定變量。實際的代碼如下。

       

      #include "stdio.h"
      #include "stdlib.h"
      #include "string.h"
      #include "sql.h"
      #include "sqlext.h"
      #include "sqltypes.h"
      
      
      SQLHANDLE       envh;           /* env handle */
      SQLHANDLE       dbch;           /* connect handle */
      SQLHANDLE       stmth;          /* statement handle */
      
      int main(int argc, char *argv[]){
          int         conn = 0;
          SQLRETURN   rc;
          SQLLEN      ind1;
          SQLLEN      ind2;
          SQLLEN      ind3;
          SQLLEN      ind4;
          SQLLEN      ind5;
          SQLINTEGER  id;
          char        dsn_str[32];
          char        usrname[32];
          char        passwd[32];
          char        sqltxt[512];
          char        f1[32];
          char        f2[32];
          char        f3[32];
          char        f4[32];
      
      
          if (argc < 3) {
              fprintf(stderr, "usage: %s dsn username password\n", argv[0]);
              return (-1);
          }
      
          strncpy(dsn_str, argv[1], 32);
          dsn_str[31] = '\0';
          strncpy(usrname, argv[2], 32);
          usrname[31] = '\0';
          strncpy(passwd, argv[3], 32);
          passwd[31] = '\0';
      
          rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &envh);
          if (rc != SQL_SUCCESS) {
              fprintf(stderr, "Allocate environment handle error.\n");
              return (-1);
          }
      
          rc = SQLSetEnvAttr(envh, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
          if (rc != SQL_SUCCESS) {
              fprintf(stderr, "Set ODBC version error.\n");
              goto free_exit;
          }
      
          rc = SQLAllocHandle(SQL_HANDLE_DBC, envh, &dbch);
          if (rc != SQL_SUCCESS) {
              fprintf(stderr, "Allocate DB connection handle error.\n");
              goto free_exit;
          }
      
          rc = SQLSetConnectAttr(dbch, SQL_ATTR_LOGIN_TIMEOUT, (SQLPOINTER)10, 0);
          if (rc != SQL_SUCCESS) {
              fprintf(stderr, "Set connection timeout value error.\n");
              goto free_exit;
          }
      
          rc = SQLConnect(dbch, (SQLCHAR *)dsn_str, SQL_NTS, (SQLCHAR *)usrname, SQL_NTS, (SQLCHAR *)passwd, SQL_NTS);
          if (rc != SQL_SUCCESS) {
              fprintf(stderr, "Connect to DB error.\n");
              goto free_exit;
          }
      
          conn = 1;
          fprintf(stdout, "connect DB ok ......\n");
      
          rc = SQLAllocHandle(SQL_HANDLE_STMT, dbch, &stmth);
          if (rc != SQL_SUCCESS) {
              fprintf(stderr, "Allocate statment handle error.\n");
              goto free_exit;
          }
      
          sprintf(sqltxt, "insert into test_tab1 (id, f1, f2, f3, f4) values (?, ?, ?, ?, ?)");
          rc = SQLPrepare(stmth, (SQLCHAR *)sqltxt, SQL_NTS);
          if (rc != SQL_SUCCESS) {
              fprintf(stderr, "Prepare statment error.\n");
              goto free_exit;
          }
      
          id = 10;
          strcpy(f1, "AAAAAAAAAA");
          strcpy(f2, "BBBBBBBBBBBB");
          strcpy(f3, "CCCCCCCCCCCCCC");
          strcpy(f4, "DDDDDDDDDDDDDDDD");
      
          ind1 = 0;
          ind2 = SQL_NTS;
          ind3 = SQL_NTS;
          ind4 = SQL_NTS;
          ind5 = SQL_NTS;
      
          rc = SQLBindParameter(stmth, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &id, 0, &ind1);
          if (rc != SQL_SUCCESS) {
              fprintf(stderr, "Bind column 1 error.\n");
              goto free_exit;
          }
      
          rc = SQLBindParameter(stmth, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 100, 0, &f1, 0, &ind2);
          if (rc != SQL_SUCCESS) {
              fprintf(stderr, "Bind column 2 error.\n");
              goto free_exit;
          }
      
          rc = SQLBindParameter(stmth, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 200, 0, &f2, 0, &ind3);
          if (rc != SQL_SUCCESS) {
              fprintf(stderr, "Bind column 3 error.\n");
              goto free_exit;
          }
      
          rc = SQLBindParameter(stmth, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 200, 0, &f3, 0, &ind4);
          if (rc != SQL_SUCCESS) {
              fprintf(stderr, "Bind column 4 error.\n");
              goto free_exit;
          }
      
          rc = SQLBindParameter(stmth, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 200, 0, &f4, 0, &ind5);
          if (rc != SQL_SUCCESS) {
              fprintf(stderr, "Bind column 5 error.\n");
              goto free_exit;
          }
      
          rc = SQLExecute(stmth);
          if (rc != SQL_SUCCESS) {
              fprintf(stderr, "Execute statment error.\n");
              goto free_exit;
          }
      
          rc = SQLEndTran(SQL_HANDLE_DBC, dbch, SQL_COMMIT);
          if (rc != SQL_SUCCESS) {
              fprintf(stderr, "End Transaction error.\n");
              goto free_exit;
          }
      
          fprintf(stdout, "Insert data successed ......\n");
      
          SQLFreeHandle(SQL_HANDLE_STMT, stmth);
      
          SQLDisconnect(dbch);
      
          SQLFreeHandle(SQL_HANDLE_DBC, dbch);
      
          SQLFreeHandle(SQL_HANDLE_ENV, envh);
      
          return (0);
      
      free_exit:
          if (stmth != NULL) {
              SQLFreeHandle(SQL_HANDLE_STMT, stmth);
          }
      
          if (conn) {
              SQLDisconnect(dbch);
          }
      
          if (dbch != NULL) {
              SQLFreeHandle(SQL_HANDLE_DBC, dbch);
          }
      
          if (envh != NULL) {
              SQLFreeHandle(SQL_HANDLE_ENV, envh);
          }
      
          return (-1);
      }

       

      如果對編程有興趣,請訪問www.tomcoding.com網站,里面有高技術含量的代碼和文檔下載。

       

      posted @ 2025-08-15 20:36  湯姆花花  閱讀(15)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲乱码中文字幕小综合| 精品国产这么小也不放过| 国产自拍偷拍视频在线观看| 激情综合五月网| 国产亚洲av夜间福利香蕉149| 亚洲av午夜福利大精品| 色成人亚洲| 久久久久夜夜夜精品国产| japan黑人极大黑炮| 蜜桃av色偷偷av老熟女| 色综合一本到久久亚洲91| 国产成人亚洲欧美二区综合| 安丘市| 日本一级午夜福利免费区 | 黄色免费在线网址| 国产成人午夜福利院| 国产精品va无码一区二区| 99福利一区二区视频| 国产精品99中文字幕| 亚洲sm另类一区二区三区| 日本深夜福利在线观看| 亚洲 日本 欧洲 欧美 视频| 亚洲区精品区日韩区综合区| 久久天天躁夜夜躁狠狠ds005| 亚洲色婷婷综合久久| 国语做受对白XXXXX在线| 午夜成人精品福利网站在线观看 | 深夜释放自己在线观看| 国产午夜精品一区二区三| 久久婷婷国产精品香蕉| 国产av成人精品播放| 日韩国产成人精品视频| 久久久久成人精品| 青春草在线视频观看| 亚洲国产精品久久电影欧美| 欧美白妞大战非洲大炮| 国产免费性感美女被插视频| 亚洲产在线精品亚洲第一站一| 青草草97久热精品视频| 亚洲色拍拍噜噜噜最新网站| 苏尼特左旗|