『壹』 嵌入式sql語句怎麼才能在c語言運行,比如這個C程序,需要什麼頭文件之類的嗎
這種程序需要先使用資料庫編程軟體的編譯器編譯生成.c文件後,才可以再使用C編譯器對.c文件進行編譯。比如Oracle的ProC和informix的ESQL/C。
建議查看一下ProC和ESQL/C方面的資料。
『貳』 如何用C語言嵌入式SQL訪問2008SQL資料庫
#include "resource.h"
#include <windows.h>
#include <sqlext.h>
SQLHENV hEnv = NULL;
SQLHDBC hConn = NULL;
SQLHSTMT hStmt=NULL;
SQLHSTMT hStmt1=NULL;
HWND hWinMain;
unsigned char ConnString[1024];
unsigned char FullString[1024];
unsigned char buffer1[1024];
unsigned char number[50];
unsigned char branch[50];
unsigned char money[50];
unsigned char szSQL[100]={"insert into account values(?,?,?)"};
long int size1,size2,size3;
void Connect()
{
int ax,length;
short int *Temp=NULL;
ax=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hEnv);
if(ax!=SQL_SUCCESS && ax!=SQL_SUCCESS_WITH_INFO)
return;
ax=SQLSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
if(ax!=SQL_SUCCESS && ax!=SQL_SUCCESS_WITH_INFO)
return;
ax=SQLAllocHandle(SQL_HANDLE_DBC,hEnv,&hConn);
if(ax!=SQL_SUCCESS && ax!=SQL_SUCCESS_WITH_INFO)
return;
SQLSetConnectAttr(hConn,SQL_ATTR_AUTOCOMMIT,SQL_AUTOCOMMIT_OFF,0);
length=sizeof(ConnString);
ax=SQLDriverConnect(hConn,hWinMain,ConnString,length,FullString,sizeof(FullString),Temp,SQL_DRIVER_COMPLETE);
if(ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO)
MessageBox(hWinMain,(char *)FullString,TEXT("提示:"),0);
}
BOOL CALLBACK MainDlg (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND a;
int ax;
switch(message)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_BUTTON1:
Connect();return true;break;
case IDC_EDIT1:
GetDlgItemText(hwnd,IDC_EDIT1,(char *)ConnString,sizeof(ConnString));
a=GetDlgItem(hwnd,IDC_BUTTON1);
if(*ConnString)
EnableWindow(a,TRUE);
else
EnableWindow(a,FALSE);
return true;break;
case IDC_BUTTON2:
GetDlgItemText(hwnd,IDC_EDIT5,(char *)buffer1,sizeof(buffer1));
ax=SQLAllocHandle(SQL_HANDLE_STMT,hConn,&hStmt);
if(ax!=SQL_SUCCESS && ax!=SQL_SUCCESS_WITH_INFO)
return 0;
SQLSetStmtAttr(hStmt,SQL_ATTR_CURSOR_TYPE,(void *)SQL_CURSOR_STATIC,0);
MessageBox(hWinMain,(char *)buffer1,TEXT("提示:"),0);
ax=lstrlen((char *)buffer1);
SQLExecDirect(hStmt,buffer1,ax);
SQLFreeHandle(SQL_HANDLE_STMT,hStmt);break;
case IDCANCEL:
if(hConn)
{
SQLEndTran(SQL_HANDLE_DBC,hConn,SQL_COMMIT);
SQLDisconnect(hConn);
SQLFreeHandle(SQL_HANDLE_DBC,hConn);
}
if(hEnv)
SQLFreeHandle(SQL_HANDLE_ENV,hEnv);
MessageBox(hWinMain,TEXT("已成功與資料庫斷開連接!"),TEXT("提示...."),0);
break;
case IDOK:
GetDlgItemText(hwnd,IDC_EDIT2,(char *)number,sizeof(number));
GetDlgItemText(hwnd,IDC_EDIT3,(char *)branch,sizeof(branch));
GetDlgItemText(hwnd,IDC_EDIT4,(char *)money,sizeof(money));
size1=sizeof(number);
size2=sizeof(branch);
size3=sizeof(money);
ax=SQLAllocHandle(SQL_HANDLE_STMT,hConn,&hStmt1);
if(ax!=SQL_SUCCESS && ax!=SQL_SUCCESS_WITH_INFO)
return 0;
SQLSetStmtAttr(hStmt1,SQL_ATTR_CURSOR_TYPE,(void *)SQL_CURSOR_STATIC,0);
SQLPrepare(hStmt1,szSQL,sizeof(szSQL));
SQLBindParameter(hStmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,number,10,&size1);
SQLBindParameter(hStmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,branch,10,&size2);
SQLBindParameter(hStmt1,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,money,10,&size3);
SQLExecute(hStmt1);
MessageBox(hWinMain,TEXT("已成功添加一條記錄!"),TEXT("提示...."),0);
SQLFreeHandle(SQL_HANDLE_STMT,hStmt1);
break;
}
case WM_INITDIALOG:
hWinMain=hwnd;return true;break;
case WM_CLOSE:
EndDialog(hwnd,0);
return true;break;
}
return false;
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
DialogBoxParam (hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, MainDlg, NULL);
return 0;
}
//Driver={SQL Server};Server=伺服器名;Database=eeqt(文件名)
//insert into account values(520,'中國銀行',30000)
『叄』 互動式SQL與嵌入式SQL有什麼不同
1、語言不同
互動式SQL是指在終端交互方式下使用的SQL語言稱為互動式SQL;嵌入式SQL是一種將SQL語句直接寫入C語言,COBOL,FORTRAN, Ada等編程語言的源代碼中的方法。
2、使用不同
互動式SQL是在終端交互方式下使用;嵌入式SQL是嵌入在高級語言的程序中使用。
(3)c語言嵌入式sql擴展閱讀:
提供對於嵌入式SQL的支持,需要資料庫廠商除了提供DBMS之外,還必須提供一些工具。為了實現對於嵌入式SQL的支持,技術上必須解決以下4個問題:
1、宿主語言的編譯器不可能識別和接受SQL文,需要解決如何將SQL的宿主語言源代碼編譯成可執行碼;
2、宿主語言的應用程序如何與DBMS之間傳遞數據和消息;
3、如何把對數據的查詢結果逐次賦值給宿主語言程序中的變數以供其處理;
4、資料庫的數據類型與宿主語言的數據類型有時不完全對應或等價,如何解決必要的數據類型轉換問題。
嵌入式SQL源碼的處理流程 為了解決上述這些問題,資料庫廠商需要提供一個嵌入式SQL的預編譯器,把包含有嵌入式SQL文的宿主語言源碼轉換成純宿主語言的代碼。
這樣一來,源碼即可使用宿主語言對應的編譯器進行編譯。通常情況下,經過嵌入式SQL的預編譯之後,原有的嵌入式SQL會被轉換成一系列函數調用。因此,資料庫廠商還需要提供一系列函數庫,以確保鏈接器能夠把代碼中的函數調用與對應的實現鏈接起來。
『肆』 C語言中使用嵌入式sql
嵌入式SQL程序的VC+SQL server 2000實現的環境配置
嵌入SQL的C應用程序具體到VC++6.0, SQL Server2000 下調試可分為五步:1、環境初始化;2、預編譯;3、編譯;4、連接;5、運行。下面就其中重要的的操作方法給以詳細說明。
1、環境初始化
(1) SQL Server2000為其嵌入式SQL提供了一此特殊的介面;默認的安裝方式沒有安裝這此介面;因此,需要把devtools.rar解壓到SQLServer的系統日錄下(即文件夾devtools中的所有文件);如果操作系統安裝在C盤,則SQL Server的系統目錄是C:\Program Files\Microsoft SQL Server。(或 在安裝Microsoft SQL Server 2000時選擇安裝Development Tools,為使用嵌入式SQL語言准備必要的頭文件和庫文件。)
( 2)初始化Visual C++ 6.0編譯器環境。在命令行方式下運行文件\Microsoft Visual Studio\VC98\Bin\vcvars32.bat。
(3)初始化SQL Server的預編譯環境。在命令行方式下運行文件:\Devtools\samples\esqlc\setenv.bat。
( 4) VC++6.0環境配置。具體配置分為如下三步[:
①Tools->options->directories->Include Files:添加 C:\Program Files\Microsoft SQL Server\devtools\include。將SQL server自帶的用於資料庫開發的頭文件包含到工程環境中。
②Tools->options->directories->Lib Files:添加C:\Program Files\Microsoft SQL Server\devtools\x861ib。將開發用到的包包含到工程中。
③project->Settings->Link->Object/Library Moles,添加庫文件:SQLakw32.lib, Caw32.lib。這兩個文件之間用空格分開。
2、預編譯
C語言編譯程序不能識別應用程序中的SQL語句,需要經過預處理程序將其轉換成C語句。SQL Server的預處理程序是nsqlprep.exe。 nsqlprep.exe在SQL Server安裝日錄的MSSQL\Binn下。若SQL Server資料庫採用的是默任安裝方式,則需要把binn.rar的內容拷貝到指定目錄下。
Microsoft SQL Server 2000提供的預編譯程序nsqlprep.exe,用於對嵌入式SQL程序進行預編譯處理,生成C語言源程序.實際上就是將嵌入式SQL程序中的嵌入式SQL語句替換為對運行時庫文件Sqlakw32. dll的函數調用,接著運行時庫文件調用動態連接庫Ntwdblib. dll通過網路來存取Microsoft SQL Server 2000資料庫伺服器.
預編譯程序nsqlprep的常用語法為:
nsqlprep ESQL_File /SQLACCESS /DB server_name.database_name /PASS login.password
其中ESQL_File是要預編譯的嵌入式SQL程序;/SQLACCESS通知nsqlprep自動地為嵌入式SQL程序中的靜態SQL語句創建相應的存儲過程;/DB server_name.database_name指明要連接的伺服器以及資料庫名稱;/PASS login.password給出登錄名及相應的口令.
下面的程序demo.sqc實現了從資料庫伺服器hushaobo的資料庫pubs中的authors表中讀取au_lname為white的人對應的 au_fname 值,並保存到變數first_name 中顯示出來。(連接資料庫的用戶為sa,對應密碼為1982)
#include<stdio.h>
void main()
{
EXEC SQL BEGIN DECLARE SECTION;
char first_name[40];
char last_name[]="White";
EXEC SQL END DECLARE SECTION;
EXEC SQL CONNECT TO hushaobo.pubs
USER sa.1982;
EXEC SQL SELECT au_fname INTO :first_name from authors WHERE au_lname = :last_name;
EXEC SQL DISCONNECT ALL;
printf("first name: %s \n",first_name);
}
在命令行下運行:nsqlprep demo.sqc /SQLACCESS /DB hushaobo.pubs /PASS sa.1982
則生成demo.c,將該文件添加到VC工程中編譯即可。
3、編譯,連接與運行
在VC++6.0中創建一個 "WIN32 Console Application"的Proiect,然後將預編譯生成的c文件加入Proiect,編譯連接即可生成訪問SQL Server的可執行程序。 Visual C++ 6.0進行編譯連接時需要用到動態鏈接庫SQLakw32.d11與SQLaiw32.d11;盡管這兩個文件已經隨同binn.rar被拷貝到SQLServer安裝目錄的MSSQL\Binn文件夾下,但仍然需要把它們的路徑加到系統路徑變數中,以使得程序運行時能找到它們,具體添加方法如下:
方法1:把這兩個文件拷貝到操作系統目錄下的system32子目錄中。
方法2:我的電腦->屬性->高級->環境變數->path->編輯,在變數值中加入路徑值;新路徑與已有路徑間用;間隔。
注意調適程序時,文件名中不要包含cursor,否則可能會出錯。
『伍』 怎樣運行C語言和Postgres編寫的嵌入SQL
嗯,正好,我這兩天也在整這個,回答下啊。
1、把這個文件存為test.pgc
2、在linux下面運行:ecpg test.pgc -o test.c(ecpg似乎也可以在windows下安裝,本行意思是將.pgc文件預編譯為真正的c程序)。
3、在linux下面運行:gcc test.c -o test -l ecpg
4、./test就可以出結果了
5、上述所有的命令都必須在test.pgc這個文件所在的文件夾下面運行咯
6、參考書籍:http://www.php100.com/manual/PostgreSQL8
『陸』 C語言db2嵌入式SQL編程,編譯問題 undefined reference to `sqlastrt'
1、要有類似的定義:
……
EXEC SQL INCLUDE SQLDA; /* or #include <sqlda.h> */
2、編譯環境要有db2的許可權和sqllib的路徑
3、我已經上傳了一份相關的文檔,預計明後天審核通過就可以看到了
《DB2開發基礎》
http://passport..com/?business&aid=6&un=chinacmouse#7
補充一個程序:
#include <time.h>
#include "stdio.h"
EXEC SQL INCLUDE SQLCA;
int main()
{
int i=0;
struct tm *pt;
time_t t1;
t1 = time(NULL);
pt = localtime(&t1);
printf("%4d%02d%02d", pt->tm_year+1900, pt->tm_mon+1, pt->tm_mday);
printf("%02d:%02d:%02d\n",pt->tm_hour,pt->tm_min,pt->tm_sec);
EXEC SQL CONNECT TO db;
i=0;
while (i<3000)
{
int j=0;
while (j<1000)
{
EXEC SQL update cc.fund set cc_code='095' where cc_no='0950031359';
j++;
}
i++;
}
EXEC SQL COMMIT;
t1 = time(NULL);
pt = localtime(&t1);
printf("%4d%02d%02d", pt->tm_year+1900, pt->tm_mon+1, pt->tm_mday);
printf("%02d:%02d:%02d\n",pt->tm_hour,pt->tm_min,pt->tm_sec);
EXEC SQL CONNECT RESET;
return 1;
}
編譯腳本:
db2 prep testdb.sqc target cplusplus bindfile using testdb.bnd package using testdb
db2 bind testdb.bnd
db2 grant execute on package testdb to public
gcc -I/app/db2inst1/sqllib/include -I./ -c -g testdb.C
gcc -L/app/db2inst1/sqllib/lib -ldb2 -L/usr/lib -lm -o testdb testdb.o
『柒』 c語言怎麼有個嵌入式sql鏈接金倉資料庫
(1) 資料庫內核· 操作系統平台跨越多種操作系統平台,可運行於Windows、Linux、Solaris等操作系統平台上,客戶端與伺服器都可跨越操作系統平台。· 數據存儲支持TB級數據量,數據文件自動管理,無須人工干預。·
『捌』 C語言嵌入式SQL, DECLARE失敗要關閉游標嗎 EXEC SQL DECLARE 這個語句會申請資源嗎
我感覺EXEC會佔用資源的,已經開始准備執行sql了
『玖』 C語言中使用嵌入式SQL 定義游標出現-01036錯誤【非法的變數/編號】請高手幫忙
http://www.dezai.cn/Channel/Web/ArticleShow.aspx?AI=61490
『拾』 linux gcc mysql 如何在C語言中使用嵌入式SQL編程 要什麼頭文件如何編譯越詳細越好
最起碼包含mysql.h
實例代碼:
#include <stdlib.h>
#include <stdio.h>
#include "mysql.h"
int main(int argc, char *argv[]) {
MYSQL *conn_ptr;
conn_ptr = mysql_init(NULL);
if (!conn_ptr) {
fprintf(stderr, "mysql_init failed\n");
return EXIT_FAILURE;
}
conn_ptr = mysql_real_connect(conn_ptr, "localhost", "rick", "secret",
"foo", 0, NULL, 0);//連接資料庫
if (conn_ptr) {
printf("Connection success\n");
} else {
printf("Connection failed\n");
}
mysql_close(conn_ptr);
return EXIT_SUCCESS;
}
編譯:(假定上面文件取名 con.c,在當前目錄下)
gcc -I/usr/include/mysql con.c -L/usr/lib/mysql -lmysqlclient -o con