Liny_@NotePad

沉迷ACG中

MySQL++调用存储过程

其实与普通调用SQL没有什么区别,只是连接方式必须使用CLIENT_MULTI_STATEMENTS(多行语句)。样例代码如下:

//////////////////////////////////////////////////////////////////////////
//	CopyRight(c) 2009, YOYO, All Rights Reserved.
//	Author: LIN YiQian
//	Created: 2009/10/14
//	Describe: MySQL++调用存储过程
//////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
#pragma comment(lib, "mysqlpp_d.lib")
#else
#pragma comment(lib, "mysqlpp.lib")
#endif

#include <mysql++.h>
#include <string>
#include <iostream>

using namespace mysqlpp;
using namespace std;

int main(void)
{
	Connection conn(false);

	conn.set_option(new mysqlpp::MultiStatementsOption(CLIENT_MULTI_STATEMENTS));

	if (conn.connect("test", "localhost", "root", "root", 3306))
	{
		Query query = conn.query();
		char* pszSQL = "call querydate()";
		StoreQueryResult pResult = query.store(pszSQL, strlen(pszSQL));

		cout << pResult[0][0] << endl;
	}
	else
	{
		cout << "连接失败!" << endl;
	}

	system("pause");

	return 0;
}

Navicat: Can't create a procedure from within another stored routine

测试调用mysql的存储过程,于是用Navicat写,结果报这个错误,源代码如下:

  1. CREATE PROCEDURE QueryDate()
  2. BEGIN
  3.       SELECT CURDATE();
  4. END;

google了下,原来在Navicat里面不需要写头,直接从BEGIN开始即可。

过程名将在保存的时候填写,参数则可以填在代码定义框下面的参数输入框中,如果要使用返回值,则可以设定类型为FUNCTION,回传框即可填写。