c语言用vc连接sql server连接成功但插入数据不成功 130

#include"stdafx.h"#include<windows.h>#include<windowsx.h>#include"resource.h"#include... #include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "MainDlg.h"
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#define LOGIN_TIMEOUT 30
#define MAXBUFLEN 255
#define CHECKDBSTMTERROR(hwnd,result,hstmt) if(SQL_ERROR==result){ShowDBStmtError(hwnd,hstmt);return;}

BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
}

return FALSE;
}

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
return TRUE;
}

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_OK:
DBTest(hwnd);
break;
default:
break;
}
}

void Main_OnClose(HWND hwnd)
{
EndDialog(hwnd, 0);
}

void ShowDBError(HWND hwnd,SQLSMALLINT type,SQLHANDLE sqlHandle)
{
char pStatus[10], pMsg[101];
SQLSMALLINT SQLmsglen;
char error[200] = {0};
SQLINTEGER SQLerr;
long erg2 = SQLGetDiagRec(type, sqlHandle,1,
(SQLCHAR *)pStatus,&SQLerr,(SQLCHAR *)pMsg,100,&SQLmsglen);
wsprintf(error,"%s (%d)\n",pMsg,(int)SQLerr);
MessageBox(hwnd,error,TEXT("???????"),MB_ICONERROR|MB_OK);
}

void ShowDBConnError(HWND hwnd,SQLHDBC hdbc)
{
ShowDBError(hwnd,SQL_HANDLE_DBC,hdbc);
}

void ShowDBStmtError(HWND hwnd,SQLHSTMT hstmt)
{
ShowDBError(hwnd,SQL_HANDLE_STMT,hstmt);
}

void DBTest(HWND hwnd)
{
SQLHENV henv = NULL;
SQLHDBC hdbc = NULL;
SQLHSTMT hstmt = NULL;
SQLRETURN result;
SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={SQL Server Native Client 10.0};SERVER={NECK-PC};UID=mysa;PWD=123456;DATABASE='重命名之后';CharSet=gbk;";
SQLCHAR ConnStrOut[MAXBUFLEN];
SQLSMALLINT cbConnStrOut = 0;

// Make connection without data source. Ask that driver
// prompt if insufficient information. Driver returns
// SQL_ERROR and application prompts user
// for missing information. Window handle not needed for
result = SQLDriverConnect(hdbc, NULL, ConnStrIn, SQL_NTS, ConnStrOut, MAXBUFLEN, &cbConnStrOut, SQL_DRIVER_PROMPT);

if(SQL_ERROR==result)
{
ShowDBConnError(hwnd,hdbc);
return;
}

result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
//SQL_NTS telling the function the previous parameter is Null-Terminated String,
//please alculate the string length for me
result = SQLPrepare(hstmt,(SQLCHAR*)"insert into '拜仁慕尼黑球员资料'(姓名,国籍) values('寂寞是丘克','乌克兰')",SQL_NTS);
CHECKDBSTMTERROR(hwnd,result,hstmt);
result =SQLExecute(hstmt);
CHECKDBSTMTERROR(hwnd,result,hstmt);
SQLFreeStmt(hstmt,SQL_CLOSE);
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
SQLFreeHandle(SQL_HANDLE_ENV,henv);
MessageBox(hwnd,TEXT("插入成功"),TEXT("提示"),MB_OK);
}

程序最后可以显示插入成功,但是在数据库表里面啥反应都没。
展开
 我来答
百度网友58720504e
2010-08-08 · 超过17用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:38.8万
展开全部
insert into 一条记录以后,应该执行 commit 以提交事务,这样表里面就有记录了。没有提交的话,数据还在缓存里,没有写到数据库的表里。当然看不到表里的数据了。希望我的回答对你有帮助!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户54879
2010-08-13
知道答主
回答量:7
采纳率:0%
帮助的人:0
展开全部
不好意思,你制作了程序执行,并没有进行执行结果判断,程序会直接返回插入成功,做个插入结果判断
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
柒宝很有钱途
2010-08-15
知道答主
回答量:24
采纳率:0%
帮助的人:27万
展开全部
楼主 你程序有很多缺点,第一你并没有判断数据库是否连接成功
第二插入的话 最好要提交函数 SQLCOMMIT什么的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Google干掉摆渡
2010-08-04 · TA获得超过580个赞
知道答主
回答量:121
采纳率:0%
帮助的人:153万
展开全部
把数据库表关了再重新打开试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
RussellKing
2010-08-04 · 超过36用户采纳过TA的回答
知道答主
回答量:158
采纳率:0%
帮助的人:112万
展开全部
得到相应语句,然后在数据库的分析查询里面试试,很多时候是格式上的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
朋澜0iy0c2
2010-08-06 · TA获得超过393个赞
知道小有建树答主
回答量:805
采纳率:0%
帮助的人:339万
展开全部
没有连接上。。。重新打开就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 4条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式