在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语句写法不对,试了好几种都不正确。麻烦大家给个正确代码,谢谢,很着急!

解决方案 »

  1.   

    update test set ct=? where ct1 like '%?%'
      

  2.   

    like '%?%' 最好直接构造好字符串,要处理单引号及通配符
      

  3.   

    like '%?%' 这样写也是不行的,试试看:
    like '%'+?+'%'
      

  4.   

    按照一楼的写法,
    rc=SQLExecute(hstmt);
    rc的返回值为100,自然不对了。按二三楼的这样写 CString  sql="\'%?%\'";
     SQLCHAR sQuery1[]="update test set ct=? where ct1 like " + sql;
     编译时提示:
     error C2440: 'initializing' : cannot convert from 'class CString' to 'unsigned char []'
    不知道我是不是把二三楼的意思给理解错了所以问题还是没解决,麻烦给个完整的语句,谢谢了。着急ing!
      

  5.   

    又试了好几种写法都不对:
    "update test set ct=? where ct1 like \''%' + ?  + '%\''"
    "update test set ct=? where ct1 like '%' + ?  + '%'"
    "update test set ct=? where ct1 like '%'?'%'"都不正确,着急!求救!
      

  6.   

    where 后面的筛选条件不要进行参数绑定,直接构造好字符串
    SQLBindParameter 的? 并不是可以用在任意地方,input通常为二进制数据写库,可能只能是insert ,update的字段