zoukankan      html  css  js  c++  java
  • 编程要准确理解程序里面的逻辑

                                                                             朱金灿
     
    晚上一位朋友问我有关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这一项,这显然是不符合逻辑嘛。
     
         我觉得,在现在很多库层层封装之下,学会理解被封装的程序的内在逻辑对开发人员尤为重要。
     
  • 相关阅读:
    java接口变量问题
    FileInputStream与BufferedInputStream的对比
    eclipse使用javaFX写一个HelloWorkld
    Windows 安装Java与配置环境变量
    asp.net core处理中文的指南
    修改release management client对应的服务器的地址
    在server2012安装tfs遇到的问题:KB2919355
    release management客户端无法连接到release management server的问题解决
    如何升级PowerShell
    VS2010下调试.NET源码
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6471258.html
Copyright © 2011-2022 走看看