有关存储过程的出现的常见错误

来源:互联网 发布:淘宝自动评价是多少天 编辑:程序博客网 时间:2024/06/05 04:51
//从数据源导入的MFC的ODBC类,通过存储过程和数据库中的表绑定CSpDEPART::CSpDEPART(CDatabase* pdb): CRecordset(pdb){m_departCount = 0;  //3个查询输出的列m_DepartID = 0;m_DEPARTDESC = "";m_nFields = 3;      //绑定查询输出的列的个数,必须要的,如果没有返回列这不需要,但是要在这个类中重载move函数的如下注释掉的部分//if (m_nFields <= 0)//{//m_bEOF = m_bBOF = TRUE;让头和尾相等//return;//}m_queryMode = 1;//两个输入参数 m_queryID = 0;m_lReturnValue = -1; //1个输出的返回参数,好像是必有的m_nParams = 3;//总共的参数个数 = 输入的个数+输出的个数 m_nDefaultType = dynaset;}//#error Security Issue: The connection string may contain a password //这行要注销掉,提示的是安全问题,这里不需要// 此连接字符串中可能包含明文密码和/或其他重要// 信息。请在查看完此连接字符串并找到所有与安全// 有关的问题后移除 #error。可能需要将此密码存// 储为其他格式或使用其他的用户身份验证。CString CSpDEPART::GetDefaultConnect(){return _T("DSN=MyDataBase;uid=sa;pwd=123456"); //和数据库连接}CString CSpDEPART::GetDefaultSQL(){return _T("{? = CALL query_departnameNew(?,?)}"); //绑定存储过程}void CSpDEPART::DoFieldExchange(CFieldExchange* pFX){pFX->SetFieldType(CFieldExchange::outputParam);  //绑定1个输出为返回值的参数RFX_Long(pFX, _T("@return_value"), m_lReturnValue);pFX->SetFieldType(CFieldExchange::inputParam);  //绑定2个存储过程的输入参数RFX_Long(pFX, _T("[@departid]"), m_queryID);RFX_Long(pFX, _T("[@querymode]"), m_queryMode);    //绑定3个存储过程的查询输出参数,DEPARTCOUNT ,DEPARTID,DEPARTDESC,绑定顺序不能错了pFX->SetFieldType(CFieldExchange::outputColumn);RFX_Int(pFX, _T("[DEPARTCOUNT]"), m_departCount);RFX_Long(pFX, _T("[DEPARTID]"), m_DepartID);RFX_Text(pFX, _T("[DEPARTDESC]"), m_DEPARTDESC);}
--存储过程如下:CREATE PROCEDURE [dbo].[query_departnameNew] (@departid  as int  ,@querymode as int)ASDECLARE @departcount as smallintif @querymode =1    beginSELECT @departcount=COUNT(*) FROM DEPARTSELECT @departcount as DEPARTCOUNT ,DEPARTID,DEPARTDESC FROM DEPART  --绑定时的顺序从前向后,与上文的绑定顺序一致    end