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

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

在C中嵌入SQL語句訪問DB2數(shù)據(jù)庫

Posted on 2008-09-03 10:43 Prayer 閱讀(2350) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++DB2

SQL/C學(xué)習(xí)筆記 在C中嵌入SQL

公司最近有個(gè)項(xiàng)目,需要在Linux下訪問DB2數(shù)據(jù)庫,Linux在我機(jī)器上裝了好幾年了也沒碰過,郁悶。DB2

就只是聽說過,沒有見過。C倒是用過一段時(shí)間。于是打開百度,狗狗開搜。
于是找到一部分文章,從中找了一些代碼:短小,感覺適合入門。被我改了改,程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "util.h"
#include <sqlca.h>
EXEC SQL INCLUDE SQLCA;
main()
{
 EXEC SQL BEGIN DECLARE SECTION;
 char firstname[130];
 char userid[9];
 char passwd[19];
 EXEC SQL END DECLARE SECTION;

 EXEC SQL CONNECT TO Test;
 EXEC SQL SELECT SEALNAME INTO :firstname
 FROM SEAL fetch first 1 row only;

 printf( "First name = %s\n", firstname );
 EXEC SQL CONNECT RESET;
 return 0;
}
我就不解釋這段程序了,網(wǎng)上一搜解釋的都比我好。一會(huì)最后貼出原貼方便以后使用。
打開VC編輯環(huán)境,將代碼貼了進(jìn)去。編譯。我考,一堆錯(cuò)誤,說什么不認(rèn)識(shí)EXEC ....,這是怎么回事啊

,難道是少包含了頭文件,趕快找啊。找了一堆,加上,外甥打燈籠-照舊(招舅)。TNND,再查。

好長時(shí)間過去了,怎么得有幾個(gè)小時(shí)吧,狗狗都累了。最后才明白,VC編譯器不能直接編譯這種代碼,(

我突然覺得怎么有點(diǎn)像ASP呢,混在一起)必須先使用預(yù)處理器將這些代碼轉(zhuǎn)換成c代碼,VC編譯環(huán)境才能

認(rèn)。那怎么轉(zhuǎn)換呢?使用什么樣的預(yù)處理器呢?再查,忘了是從哪查到一個(gè) DB2 prep *.sqc bindfile命

令,感覺上這個(gè)可以了,馬上運(yùn)行cmd打開控制臺(tái),輸入試,N次后我差點(diǎn)一屁股就坐地上了,前面帶了個(gè)

DB2,應(yīng)該是在DB2的命令行下運(yùn)行吧,于是在bin下找到了什么exe來著,就是命令行工具中的全集窗口。

打開,輸入,興奮啊。在我可愛的sqc文件旁邊出了個(gè).c的文件,哈哈,就是他了。

或許是我高興的太早,或許是我運(yùn)氣不好,該例子始終過不去,沒報(bào)什么錯(cuò)
,NND。這是為啥?!難道我的SQL語句錯(cuò)了?!在DB2的控制臺(tái)下再試,考,成功。再運(yùn)行我的程序,還

是報(bào)這個(gè)錯(cuò)。改程序,或許是我的Select 語句不行,我建個(gè)表試試不取數(shù)據(jù)總行吧。于是有了如下的代

碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "util.h"
#include <sqlca.h>

EXEC SQL INCLUDE SQLCA;
#define CHECKERR(CE_STR) if (check_error (CE_STR, &sqlca) != 0) return 1;

int check_error (char eString[], struct sqlca *caPointer)
{
 char eBuffer[1024];
 char sBuffer[1024];
 short rc, Erc;
 if (caPointer->sqlcode != 0)
  {
  printf ("--- error report ---\n");
  printf ("ERROR occured : %s.\nSQLCODE : %ld\n", eString,
  caPointer->sqlcode);
 }
 return 0;
}

int main(int argc, char *argv[])
{
 EXEC SQL BEGIN DECLARE SECTION;
 char firstname[13];
 char userid[9];
 char passwd[19];
 EXEC SQL END DECLARE SECTION;
 printf( "Sample C program: STATIC\n" );
 if (argc == 1)
 {
  EXEC SQL CONNECT TO test user test using hdshtest;
  CHECKERR ("CONNECT TO SAMPLE");
 }
 else if (argc == 3)
 {
  strcpy (userid, argv[1]);
  strcpy (passwd, argv[2]);
  EXEC SQL CONNECT TO test USER :userid USING :passwd;
  CHECKERR ("CONNECT TO SAMPLE");
 }
 else
 {
  printf ("\nUSAGE: static [userid passwd]\n\n");
  return 1;
 } /* endif */

    // create table
  EXEC SQL CREATE TABLE tbname(col1 SMALLINT,
                                       col2 CHAR(7),
                                       col3 VARCHAR(7),
                                       col4 DEC(9, 2),
                                       col5 DATE,
                                       col6 BLOB(5000),
                                       col7 CLOB(5000));

 CHECKERR("Table -- Create");

    EXEC SQL COMMIT;
    CHECKERR("Transaction -- Commit");
 
 /*
    
     EXEC SQL SELECT account.moneytype INTO :firstname FROM test.account fetch first

1 row only;
 */
 EXEC SQL SELECT name INTO :firstname FROM accounttype where id = '1';
 CHECKERR ("SELECT statement");
 printf( "First name = %s\n", firstname );
 EXEC SQL CONNECT RESET;
 CHECKERR ("CONNECT RESET");
 return 0;
}
/* end of program : STATIC.SQC */

重復(fù)上述步驟,重新生成了.C的文件,還是出不了我要的結(jié)果,但是我加上出錯(cuò)處理了, 先看看出錯(cuò)信

息,出錯(cuò)信息如下:
sqlcode:  -805
sqlstate:  51002
這是什么東西?再搜。我可是在百度上搜了N分鐘啊。大多是java的,看不懂。老天不負(fù)我有心人吶,最

終找到了解釋:

請(qǐng)問db2的這個(gè)錯(cuò)誤是什么意思?

DB2 SQL error: SQLCODE: -805, SQLSTATE: , SQLERRMC: NULLID.SYSSH200

回答:
解釋:  此信息 (SQLCODE) 的可能原因是:

o   未在數(shù)據(jù)庫中定義指定的程序包或程序。

o   未聯(lián)編該程序或它已被卸下。

o   正在運(yùn)行的應(yīng)用程序未與數(shù)據(jù)庫聯(lián)編。

o   若試圖運(yùn)行 DB2 實(shí)用程序或 CLI 應(yīng)用程序, 則 DB2
    實(shí)用程序可能需要重新聯(lián)編至數(shù)據(jù)庫。

不能處理該語句。

用戶響應(yīng):
指定正確的程序包名或聯(lián)編該程序。若正在運(yùn)行的應(yīng)用程序未與數(shù)據(jù)庫聯(lián)編
,則與數(shù)據(jù)庫管理員聯(lián)系以執(zhí)行必需的聯(lián)編。

若 DB2
實(shí)用程序需要重新聯(lián)編至數(shù)據(jù)庫,則當(dāng)連接至數(shù)據(jù)庫時(shí),數(shù)據(jù)庫管理員可以
通過從實(shí)例的 bnd 子目錄發(fā)出下列 CLP 命令之一來完成此操作: 

o   對(duì)于 DB2 實(shí)用程序,發(fā)出 "DB2 bind @db2ubind.lst blocking all
    grant public"。

o   對(duì)于 CLI,發(fā)出 "DB2 bind @db2cli.lst blocking all grant
    public"。

聯(lián)合體系統(tǒng)用戶:確保在適用的數(shù)據(jù)源上聯(lián)編 聯(lián)合體服務(wù)器
所必需的程序包。參考“安裝和配置補(bǔ)遺”指南以獲取有關(guān)將程序包與數(shù)據(jù)
源聯(lián)編的詳情。

sqlcode:  -805

sqlstate:  51002
當(dāng)真是遇上救星了?于是乎,我將剛才搜到的信息總結(jié)了一下,三句話:

如果您打完補(bǔ)丁10后,您需要對(duì)每一個(gè)數(shù)據(jù)庫執(zhí)行
db2 terminate
db2 CONNECT TO <dbname>
db2 BIND <path>/db2schema.bnd BLOCKING ALL GRANT PUBLIC sqlerror continue
db2 terminate

DB2 bind @db2ubind.lst blocking all grant public
DB2 bind @db2cli.lst blocking all grant public

bind "C:\Program Files\IBM\SQLLIB\BINtestmain.bnd" BLOCKING ALL GRANT PUBLIC sqlerror

continue

如上在DB2后輸入的上述命令,我暈,程序還是不對(duì)。不能出來正確結(jié)果。今天注定我一晚上睡不好嗎?
就是我要失去信心的時(shí)候,發(fā)現(xiàn)了在我的.c的旁邊一直躲著個(gè).bnd的文件。考,再bind一次這個(gè)家伙。哈哈哈,我要的結(jié)果出來了!爽,痛快,寫下來,省得過幾天忘了,有做這方面的朋友也可以少走些彎路,呵呵。
 

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 亚洲第一区在线观看| 亚洲国产婷婷综合在线精品 | 亚洲美女在线观看| 99精品国产在热久久| 制服丝袜激情欧洲亚洲| 新狼窝色av性久久久久久| 久久久久综合网| 亚洲第一页自拍| 亚洲小说欧美另类婷婷| 久久aⅴ国产紧身牛仔裤| 久久久久久久久久看片| 男人插女人欧美| 欧美日韩国产黄| 国产美女精品在线| 在线免费观看一区二区三区| 一区二区三区回区在观看免费视频| 亚洲一区在线观看视频| 欧美亚洲在线播放| 欧美不卡激情三级在线观看| 日韩一区二区精品视频| 午夜精品福利电影| 欧美fxxxxxx另类| 国产欧美视频在线观看| 最新亚洲一区| 久久久久久亚洲精品杨幂换脸| 亚洲激情视频在线观看| 久久av老司机精品网站导航| 欧美日韩一区二区三区在线看| 精品成人一区二区| 新67194成人永久网站| 亚洲黄色影片| 欧美综合二区| 国产视频久久网| 午夜精品久久久久99热蜜桃导演| 亚洲国产天堂久久综合网| 久久亚洲精品一区| 国产一区二区三区高清播放| 亚洲欧美区自拍先锋| 亚洲精品欧美一区二区三区| 免费亚洲婷婷| 亚洲激情一区二区三区| 麻豆精品国产91久久久久久| 亚洲作爱视频| 欧美激情久久久久| 久久久久久久综合狠狠综合| 国内精品久久久久久久影视麻豆| 亚洲综合视频一区| 一区二区三区蜜桃网| 欧美日本国产精品| 久久av红桃一区二区小说| 欧美精品aa| 在线中文字幕一区| 亚洲欧洲在线看| 欧美女同视频| 亚洲一区二区免费看| 一区二区三区.www| 国产精品拍天天在线| 亚洲午夜激情免费视频| 艳妇臀荡乳欲伦亚洲一区| 欧美另类在线播放| 中文一区二区| 亚洲欧美日韩电影| 韩国免费一区| 亚洲第一网站| 欧美视频手机在线| 欧美一级网站| 乱码第一页成人| 99精品国产一区二区青青牛奶| 一区二区三区高清视频在线观看| 国产精品日韩一区| 麻豆av福利av久久av| 欧美黑人国产人伦爽爽爽| 中文网丁香综合网| 亚洲欧美日韩系列| 亚洲国产经典视频| 亚洲麻豆视频| 国产一区二区剧情av在线| 免费黄网站欧美| 欧美日韩一区二区三| 久久久午夜电影| 欧美日韩一区在线| 久久久久国内| 欧美人妖另类| 久久久97精品| 亚洲午夜av| 亚洲视频免费在线观看| 欧美一激情一区二区三区| 99国产精品国产精品毛片| 亚洲欧美日韩综合国产aⅴ| 最新国产乱人伦偷精品免费网站 | 欧美日韩综合网| 久久国产精品一区二区三区| 欧美成人午夜激情| 欧美一区二区三区视频在线| 免费人成网站在线观看欧美高清| 亚洲一区二区三区在线看| 久久久蜜桃精品| 欧美一二三视频| 欧美精品在线播放| 久久这里只精品最新地址| 欧美日韩中字| 亚洲激情成人| 欧美一区二区三区喷汁尤物| 亚洲国产欧美日韩另类综合| 亚洲男人的天堂在线| 亚洲精品视频免费观看| 欧美在线在线| 亚洲欧美国产日韩中文字幕| 免费在线看成人av| 麻豆国产精品va在线观看不卡| 国产精品一区=区| 99视频一区二区三区| 亚洲免费成人| 另类天堂av| 免费观看成人网| 国语自产精品视频在线看抢先版结局| 一区二区激情小说| 夜夜精品视频| 欧美夫妇交换俱乐部在线观看| 久久这里有精品15一区二区三区| 国产欧美一区视频| 亚洲欧美日韩在线播放| 亚洲在线一区二区三区| 欧美精品色综合| 亚洲国产日日夜夜| 亚洲激情精品| 欧美精品一卡二卡| 亚洲精品之草原avav久久| 日韩视频中文字幕| 欧美日本精品一区二区三区| 亚洲区一区二| 亚洲线精品一区二区三区八戒| 国产精品爱啪在线线免费观看| 日韩一级片网址| 性视频1819p久久| 国产亚洲欧美另类中文| 欧美怡红院视频| 欧美电影免费网站| 亚洲欧洲日韩在线| 欧美日韩高清在线| 亚洲一区二区久久| 久久人人爽人人爽| 亚洲日韩欧美视频| 欧美系列精品| 性欧美8khd高清极品| 毛片一区二区三区| 99国产精品99久久久久久| 国产精品久在线观看| 久久成人资源| 亚洲精品美女在线观看| 欧美一二三区在线观看| 亚洲大片免费看| 欧美日韩一区二区免费视频| 亚洲欧美一区二区三区久久| 久热精品视频在线免费观看| 亚洲激情小视频| 国产乱码精品一区二区三区五月婷| 久久精品一区二区| 日韩视频一区二区在线观看| 久久精品123| 日韩视频在线一区| 韩国三级在线一区| 欧美日韩午夜在线| 久久国产精品一区二区三区| 亚洲激情在线激情| 久久久久欧美| 亚洲一区二区三区精品动漫| 黄色精品网站| 欧美视频精品在线| 久久久久网址| 午夜久久福利| 一本色道久久综合狠狠躁的推荐| 久久精品国产一区二区电影 | 99riav1国产精品视频| 国产精品午夜春色av| 免费黄网站欧美| 午夜精品短视频| 夜夜嗨av一区二区三区四区| 欧美大片一区二区三区| 欧美伊人影院| 这里只有精品视频| 在线欧美亚洲| 国产一区在线看| 国产精品毛片在线看| 你懂的一区二区| 欧美一区二区性| 亚洲一区二区三区四区五区黄| 欧美激情a∨在线视频播放| 久久久久se| 久久成人一区二区| 午夜在线精品偷拍| 亚洲一区二区三区久久 |