• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 419
  • Last Modified:

Call a Stored Procedure!

Hi,

Now I am using the CDatabase & CRecordSet classes to manipulate the database.

How can I call a stored procedure in MSSQL server in MFC?

Also, from calling that procedure, a string will be returned! How can I get this string?

Thanks!
0
cplau
Asked:
cplau
  • 4
  • 3
  • 3
  • +2
1 Solution
 
jtwine100697Commented:
Using the MSDN Library (or using the search on MS' site), search for "CRecordset AND stored AND procedure".  That should give you all of the details that you need.  (And will not cost you points!)

-=- James.
0
 
SteveGTRCommented:
You've got to check out the stored procedure wizard on Code Projects. It's great for working with stored procedures in VC++/MFC:

http://www.codeproject.com/database/spcw.asp
0
 
ranmanorCommented:
you can call a stored procedure like this:

db.ExecuteSQL("Stored_Procedure_Name Param1, Param2,....");

db is an open CDatabase variable.

I don't know how to get the returned value, sorry.

0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
DanRollinsCommented:
Here is a useful piece of code.  It obtains one value from any SQL statement.  This turns out to be useful in all kinds of situations where you don't want to define a formal recordset using the ClassWizard.

//=-=-=-=-=-=-=-=-=-=-=--=-= class Definition
#include <afxdb.h>
class CRsGetOneValue : public CRecordset
{
     public:
     CRsGetOneValue(CDatabase* pDatabase, LPCSTR szSQL );
     CString     m_sSQL;
     CString     m_sRetValue;
     virtual void DoFieldExchange(CFieldExchange* pFX);
     CString GetDefaultSQL() {return m_sSQL;};
};
//=-=-=-=-=-=-=-=-=-=-=--=-= class Implementation

CRsGetOneValue::CRsGetOneValue(CDatabase* pdb, LPCSTR szSQL )
: CRecordset(pdb), m_sSQL(szSQL)
{
     m_sRetValue="";
     m_nFields= 1;
     m_nDefaultType= snapshot;
}
void CRsGetOneValue::DoFieldExchange(CFieldExchange* pFX)
{
     pFX->SetFieldType(CFieldExchange::outputColumn);
     RFX_Text(pFX, "", m_sRetValue);
}

//=-=-=-=-=-=-=-=-=-=-=--=-= typical usage
void CD10WebDlg::OnButton1()
{
    CDatabase db;
    BOOL fRet= db.Open( "", FALSE, FALSE, "ODBC;DSN=MyDSN;UID=USER;PWD=PASSWORD", TRUE);
   
//    CString sSQL= "SELECT sNameLast FROM Inquiry";
//    CString sSQL= "SELECT COUNT(*) FROM Inquiry";
    CString sSQL= "{call OverDueAccts}";

    CRsGetOneValue rs( &db, sSQL );
    rs.Open( AFX_DB_USE_DEFAULT_TYPE, 0, CRecordset::executeDirect );

    TRACE( rs.m_sRetValue + "\r\n" );
}

=-=-=-=-=-=-=-=-=-=-=-

As you can see, to execute a stored procedure, just pass
   "{call spName}"
in the ctor (no spaces between { and call).  You can also use any SELECT statement.  The single returned value will be a string.  If you need an int, just use (for instance):

   int nRet= atoi( rs.m_sRetValue );

One other note: If you expect the return value to be larger than 255 bytes, then you need to modify the RFX_Text call:

   RFX_Text(pFX, "", m_sRetValue, 2048);

-- Dan
0
 
DanRollinsCommented:
hi ranmanor,
Do you have any additional questions?  Do any comments need clarification?

-- Dan
0
 
ranmanorCommented:
no, thanks.
0
 
jtwine100697Commented:
> no, thanks.

Just a thought: now might be the time to accept DanRollins' comment as an answer... :)

-=- James.
0
 
ranmanorCommented:
true.
tell it to cplau .
0
 
jtwine100697Commented:
D'oh!

Got confused for a second there...! :O

-=- James.
0
 
DanRollinsCommented:
hi ranmanor,
Sorry!
hi jtwine,
Sorry!

hi cplau,
Do you have any additional questions?  Do any comments need clarification?

-- Dan
0
 
DanRollinsCommented:
hi cplau,
Do you have any additional questions?  Do any comments need clarification?

-- Dan
0
 
Computer101Commented:
Comment from DanRollins accepted as answer.

Thank you
Computer101
Community Support Moderator
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 4
  • 3
  • 3
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now