用ADO连SQL Server数据库执行数更新数据库字段时,只有"Update表Set字段=值"中的“值”为数字时才能更新,只要有字母就不能成功,为何??!!
我是这样做的:
1、在ReadApp中声明:
         _ConnectionPtr m_pConnection;//连接对象
_RecordsetPtr  m_pRecordset;//数据集
_CommandPtr    m_pCommand;//命令对象
2、连数据库;
3、写执行SQL语句函数:
int CReadApp::ExecSql(CString strSql)
{
try
{
_variant_t RecordsAffected;
m_pRecordset = m_pConnection->Execute((_bstr_t)
                                       strSql,&RecordsAffected,adCmdText);
return 1;
}
catch(_com_error error)
{
AfxMessageBox("数据库执行失败!");
//m_pRecordset = NULL;
return 0;
}}
4、执行字段更新操作:
void CPageSec::OnHideRun() 
{
// TODO: Add your control notification handler code here
CString strSql,strValue,strKey,strPath,strReg;         if(!m_bHideRun)
{
strSql = "update tab_computer_set set hiderun = abc";
               //注:该语句执行失败,若“abc”改为任意数字(不能太长),则成功
               //即使字符串abc打上双引号执行也会失败
}
else
{
strSql = "update tab_computer_set set hiderun = NULL";
               //注:该语句可成功执行
} ((CReadApp*)AfxGetApp())->ExecSql(strSql);
}请问大虾们,这是为何?

解决方案 »

  1.   

    是不是将CString对象转换为_bstr_t时这样转换有问题:((_bstr_t)strSql ,该怎样转换呢?
      

  2.   


        首先你要确定你所更新的字段的类型,若为int型当然是放不进去字符串的。
     若为char 或 varchar 类型,则因该将结果用单引号括起来,如‘abc';也可以
     声明一个变量赋给要更新的字段。两种方法都可以的。
      

  3.   

    修改语句:m_pRecordset = m_pConnection->Execute(                    strSql.AllocSysString(),&RecordsAffected,adCmdText);修改sql语句为:(若abc为字符串)
    strSql = "update tab_computer_set set hiderun = ‘abc‘";现在你再试一下。
      

  4.   

    try
    {
    _variant_t RecordsAffected;
    m_pRecordset = m_pConnection->Execute((_bstr_t)
                                              strSql,&RecordsAffected,adCmdText);
    return 1;
    }
    catch(_com_error error)
    {
    AfxMessageBox("数据库执行失败!");
    //m_pRecordset = NULL;
    return 0;
    }   
         将try{……}中的 "return 1" 放到catch{……}后面。避免错误没有被
      处理就返回,导致出错。