• 编程要准确理解程序里面的逻辑


                                                                             朱金灿
     
    晚上一位朋友问我有关ado访问数据库的问题。说实话我已经有相当一段时间没有做数据库了,感觉把知识忘得差不多了。
     
    朋友的程序是这样的:
    int CGMSDlg::LoginCheck(CString strID, CString strPwd)
    {
        if( m_adoConnection.Open("GMS.mdb")==FALSE )
        {
            return LINK_FAILURE;
        }
     
        m_adoRecordset.SetAdoConnection(&m_adoConnection);
        m_adoRecordset.PutCursorLocation(adUseClient);
        if( m_adoRecordset.Open("users", adCmdTable)==FALSE )
        {
            return LINK_FAILURE;
        }
       
        if( m_adoConnection.BeginTrans()==BEGINTRANS_FAILURE )
        { 
            return LINK_FAILURE;
        }
     
        //// 查找用户名
        m_strFind.Format("SELECT pwd FROM users WHERE id=/"%s/"",strID);
        if ( m_adoRecordset.Find(m_strFind)==FALSE )
        {
            return WRONG_ID;
        }
     
        //// 若找到,取出用户密码,和登录密码进行比较
        if( m_adoRecordset.GetCollect("pwd", m_varValue)==FALSE
           || strcmp(strPwd, (_bstr_t)m_varValue)!=0 )
        {
            return WRONG_PWD;
        }
     
        m_strUserName = m_adoRecordset.GetCollect("name",m_varValue);
        m_strUserName = (LPCSTR)(_bstr_t)m_varValue;
        return CHECK_PASS;
    }
     
         这里的m_adoConnection是ado中的_ConnectionPtr一个封装类的实例,m_adoRecordset是_RecordsetPtr一个封装类的实例(我个人感觉没必要对ado进行封装)。
     
          我觉得朋友没有准确理解程序的逻辑。比如m_adoRecordset.Find函数(其实是封装_RecordsetPtr的Find函数),它的参数放的就不是sql语句,而是查询条件。更为关键的问题是他没有理解ado的内在逻辑。其实我们看到对某个记录取字段值,都是基于查询结果集的。那么下面一段代码:
    m_strFind.Format("SELECT pwd FROM users WHERE id=/"%s/"",strID);
        if ( m_adoRecordset.Find(m_strFind)==FALSE )
        {
            return WRONG_ID;
        }
    看似是比较ID,但实际上执行sql语句的结果记录集却没有id这一项,这显然是不符合逻辑嘛。
     
         我觉得,在现在很多库层层封装之下,学会理解被封装的程序的内在逻辑对开发人员尤为重要。
     
  • 相关阅读:
    es6箭头函数
    微信小程序入门
    浏览器常见错误代码
    nginx学习
    windows下mongodb安装与使用整理
    mongodb简单的增删改查
    github入门到上传本地项目
    Robomongo
    对象(面向对象、创建对象方式、Json)
    代码编辑器——Visual Studio Code
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6471258.html
Copyright © 2020-2023  润新知