我的程序如下:
   try{
      CDatabase tempdb;
      CString id1="234";
      CString Sql=_T("insert biao1 (id,name,sex) values(id1,'john',man)");
      tempdb.ExecuteSQL(Sql);
      }
    catch(CDException *e)
     {
        ............
     }结果出现异常,捕获的结果是:
“在此上下文中不允许使用id,此处只能是常量,表达式或变量,不允许使用列名。

这是怎么回事啊?

解决方案 »

  1.   

    CString Sql=_T("insert biao1 (id,name,sex) values(id1,'john',‘man‘)");
    这一句是这样的,刚才打错了
      

  2.   

    我打错了
    CString Sql=_T("insert into biao1 (id,name,sex) values(id1,'john',‘man‘)");
      

  3.   

    你在SQL语句中使用C++变量是不行的
    "Insert into biao1 (id,name,sex) values ('1234','john',‘man‘)"
    CString str = "Insert into biao1 (id,name,sex) values('" + id1 + "','john','man')";
      

  4.   

    你的Sql字符串中的idl是一个变量,不能直接放到串中,应该用连接符,如下
    CString Sql==_T("insert biao1 (id,name,sex) values('")+id1+_T("','john',‘man‘)");
    你在定义idl变量的时候最好这样  CString idl=_T("234");
      

  5.   

    ysf1980() 说的对,sql语句无法识别你的c++变量,应该使用字符串连接起来
      

  6.   

    m_db.Execute("Insert into biao1 (id,name,sex) values('" + id1 + "','john','man')";即可!!!祝你成功!!
      

  7.   

    CString SQL;
    SQL.F("Insert into biao1 (id,name,sex) values( '%s' ,'john','man')",di1); //如果id 是数值,就改用%d
    m_db.Execute(SQL);
      

  8.   

    怎么刚才漏了几个字?
    SQL.Format("Insert into biao1 (id,name,sex) values( '%s' ,'john','man')",di1); 才对
      

  9.   

    应该是这样吧
    CDatabase tempdb;
          CString id1="234";
          CString Sql.Format("insert biao1 (id,name,sex) values(%s,'john',man)",id1);
          try{
          if(tempdb.OpenEx("DSN=数据源;",CDatabase::noOdbcDialog)==0){
             ...;
           }
          }
          catch(...){
             ...
           }
          tempdb.BeginTrans();
          tempdb.ExecuteSQL(Sql);
          tempdb..CommitTrans();