我在程序中使用C Apis把.sql脚本内容保存到buffer中,(已经开启多行执行功能)
如何调用API:mysql_query()执行,结果返回0,表示执行成功,但是在数据库中发现没有数据.
.sql中有insert命令.如果我在命令行中使用source命令导入.sql那么就正确?我的疑问是:为什么mysql_query执行正确,但是数据库中没有受影响?
如何调用API:mysql_query()执行,结果返回0,表示执行成功,但是在数据库中发现没有数据.
.sql中有insert命令.如果我在命令行中使用source命令导入.sql那么就正确?我的疑问是:为什么mysql_query执行正确,但是数据库中没有受影响?
mysql -u -p <sql文件
C中可以把命令读入到字符串,然后直接执行。
if (mysql_real_connect (mysql, host_name, user_name, password,
db_name, port_num, socket_name, CLIENT_MULTI_STATEMENTS) == NULL)
我的数据库脚本.sql语句为:USE yuu3;delimiter ;;
DROP TABLE IF EXISTS yuu_Version;;
CREATE TABLE yuu_Version
(
Date DATETIME,
Version VARCHAR(40) NOT NULL,
PRIMARY KEY(Date)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;;DROP PROCEDURE IF EXISTS up_SelVersion;;
CREATE PROCEDURE up_SelVersion()
BEGIN
SELECT * FROM Version;
END ;;DROP PROCEDURE IF EXISTS up_AddVersion;;
CREATE PROCEDURE up_AddVersion(IN in_Date DATETIME,IN in_Version VARCHAR(40))
BEGIN
INSERT INTO yuu_Version(Date,Version) VALUES(in_Date, in_Version);
END ;;
delimiter ;
CREATE PROCEDURE up_AddVersion(IN in_Date DATETIME,IN in_Version VARCHAR(40))
BEGIN
INSERT INTO yuu_Version(Date,Version) VALUES(in_Date, in_Version);
END ;;哪怕最后自己+2行
print "本段代码执行成功!"
select "本段代码执行成功!"我做数据库版本发布最讨厌没有日志的东西
一般有70个SQL文件,要发布到24个数据库上,
我肯定写批处理个脚本执行,最后看日志;
一看出现400个空日志文件,还有回过头来检查SQL
if (mysql_select_db(&m_MySql, _T("yuu3")))
{
return NULL;
}
CString FileContent = _T("insert into yuu_version(Date, Version) values('2013-4-22', 'v1.0.1');");
// //一次性执行脚本中的内容.
if (mysql_query(&m_MySql, FileContent))
{
return false;
}执行结果有发现数据库上有刚刚插入的值.如果代码如下://测试
CString FileContent = _T("use yuu3; insert into yuu_version(Date, Version) values('2013-4-22', 'v1.0.1');");
// //一次性执行脚本中的内容.
if (mysql_query(&m_MySql, FileContent))
{
return false;
}发现执行调用mysql_query成功,但是数据库中没有发现有值插入,看来可能只是执行use yuu3;这条语句就返回,没有执行后面的插入语句.
如果代码中有的SQL语句如下:use yuu3; insert into yuu_version(Date, Version) values('2013-4-22', 'v1.0.1');"上面的代码能执行正确,
如果更改默认行的结束符,如:use yuu3; delimiter ;; insert into yuu_version(Date, Version) values('2013-4-22', 'v1.0.1');; delimiter ;"我把delimiter;;去掉,结束的delimiter;去掉就可以正常执行了?
什么原因?奇怪,难道不能自行设置行的结束符?
考虑5楼的建议吧
进行判断
我也是去掉了 deimiter 就可以了.