如何用C语言嵌入式SQL访问2008SQL数据库???

如何用C语言嵌入式SQL访问2008SQL数据库???,第1张

#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 truebreak

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 truebreak

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=hwndreturn truebreak

case WM_CLOSE:

EndDialog(hwnd,0)

return truebreak

}

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)

你那个update语句是有where条件的,也可能根本就没有符合where条件的记录存在,所以也就不会有被更新的情况。但这个语句是被成功执行了的。所以返回值是成功的。

大概是这么回事。

sql系统带了

sqldb.h

sqlfront.h

sqlfund.h

针对borland

c++

3.1

有BLDBLIB.LIB还带了几个驻留程序:

DBMSSPX.EXE

使用SPX协议与server通讯

DBNMPIPE.EXE

使用命名管道与server通讯

....你可以使用提供的函数连接SQL,LOGIN,执行SQL命令,取得结果


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10074659.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存