VC++中带参数的update语句错误

jiangeb 2008-09-08 02:19:52
在VC里用ODBC API去update 数据库里的值,环境是:
VC++ 6.0 ODBC API3.0 SqlServer 2000
我的问题是不会写带like参数的update语句,具体如下:

rc=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
if(rc==SQL_SUCCESS||rc==SQL_SUCCESS_WITH_INFO)
{
rc=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,0);
if(rc==SQL_SUCCESS||rc==SQL_SUCCESS_WITH_INFO)
{
rc=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
if(rc==SQL_SUCCESS||rc==SQL_SUCCESS_WITH_INFO)
{
rc=SQLConnect(hdbc,(SQLCHAR*)"istpnew",SQL_NTS,(SQLCHAR*)"istp",SQL_NTS,(SQLCHAR*)"istp123",SQL_NTS);
if(rc==SQL_SUCCESS||rc==SQL_SUCCESS_WITH_INFO)
{
SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);
SQLSetStmtAttr(hstmt,SQL_ATTR_CURSOR_TYPE,(SQLCHAR*)SQL_CURSOR_DYNAMIC,SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt,SQL_ATTR_CONCURRENCY,(SQLCHAR*)SQL_CONCUR_LOCK,SQL_IS_UINTEGER);
SQLCHAR sQuery1[]="update test set ct=(?) where ct1 like %(?)%";
rc=SQLPrepare(hstmt,sQuery1,SQL_NTS);
if(rc==SQL_SUCCESS||rc==SQL_SUCCESS_WITH_INFO)
{
char cct[20]; char cct1[20];
SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,20,0,cct,sizeof(cct),0);
SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,20,0,cct1,sizeof(cct1),0);

strcpy(cct,(LPCSTR)ct.Left(20));
strcpy(cct1,(LPCSTR)ct1.Left(20));

rc=SQLExecute(hstmt);
if(rc==SQL_SUCCESS||rc==SQL_SUCCESS_WITH_INFO)

这里总得到rc=-1 我觉得是update语句写法不对,试了好几种都不正确。麻烦大家给个正确代码,谢谢,很着急!

我已经试过的好几种错误写法:
"update test set ct=? where ct1 like \''%' + ? + '%\''"
"update test set ct=? where ct1 like '%' + ? + '%'"
"update test set ct=? where ct1 like '%'?'%'"
"update test set ct=? where ct1 like '%?%'"
...全文
98 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunyuchuan86 2008-09-09
  • 打赏
  • 举报
回复
"update test set ct='?' where ct1 like '%' + ? + '%'"


CN_SQL 2008-09-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jiangeb 的回复:]
"update test set ct='?' where ct1 like '%'?'%'"
"update test set ct='?' where ct1 like '%?%'"

都不对
[/Quote]
什么叫不对?楼主一直没说清楚,其实关键是
VC++里应该有控制台可以中断跟踪DEBUG,你可以看看你实际上执行的时候
你构造出来的SQL语句是不是你真正想要的。
jiangeb 2008-09-08
  • 打赏
  • 举报
回复
"update test set ct='?' where ct1 like '%'?'%'"
"update test set ct='?' where ct1 like '%?%'"

都不对
-晴天 2008-09-08
  • 打赏
  • 举报
回复
试试:
"update test set ct='?' where ct1 like '%?%'"
水族杰纶 2008-09-08
  • 打赏
  • 举报
回复
C++看不懂
帮你顶~~

34,589

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧