MTSQL HELP: To disable autocommit mode for a single series of statements, use the START TRANSACTION statement: START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summary=@A WHERE type=1; COMMIT;With START TRANSACTION, autocommit remains disabled until you end the transaction with COMMIT or ROLLBACK. The autocommit mode then reverts to its previous state.
2。打开MYSQL的一般查询日志,(如果没有打开),看一下实际提交到数据库中的命令是什么?以断定故障在程序还是服务器。可以原因, 字符集问题。
1.在navicat工具中测试过存储过程,一切正常。
2.用c#调用存储过程。存储过程代码:(以in开头的为输入参数;以out开头的为输出参数)
BEGIN
#out_log_code。-1为异常情况;大于0为返回的正确值
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
set out_log_code=-1;
start transaction;
insert into login_log_tb(game_id,server_name,account,user_password,login_ip) values (in_game_id,in_server_name,in_account,in_user_password,in_login_ip);#记录日志set out_log_code=LAST_INSERT_ID();
ENDc#调用代码如下:(测试程序)
try
{
string connStr = System.Configuration.ConfigurationManager.AppSettings.Get("MySqlString").ToString().Trim();
MySqlConnection conn = new MySqlConnection(connStr);
conn.Open();
MySqlCommand cmd = new MySqlCommand("sp_insert_login_log", conn);
cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("in_game_id", 1);
cmd.Parameters.AddWithValue("in_server_name", "存储过程");
cmd.Parameters.AddWithValue("in_account", "liqiang");
cmd.Parameters.AddWithValue("in_user_password", "pwd");
cmd.Parameters.AddWithValue("in_login_ip", 1234567890); MySqlParameter outPara = new MySqlParameter("?out_log_code", MySqlDbType.Int32);
outPara.Direction = ParameterDirection.Output; cmd.Parameters.Add(outPara);
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
}
MySQL 中文显示乱码
字符集问题,应该有乱码写入啊。
另外,(1)在navicat工具中测试时,测试过字符问题,可以写入汉字,无乱码。
(2)c#程序insert数据时(直接语句写入,不是调用存储过程),也可以写入汉字,无乱码。
不过,我再测试一下,调用存储过程不传汉字看看。呵呵
存储过程中有:
insert into login_log_tb.....
c#调用后,select * from login_log_tb。没新数据。
另外,我在navicat工具中单独测试过这个存储过程,可以写入数据。c#调就select不出来。
To disable autocommit mode for a single series of statements, use the START TRANSACTION statement:
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;With START TRANSACTION, autocommit remains disabled until you end the transaction with COMMIT or ROLLBACK. The autocommit mode then reverts to its previous state.
就是这个问题。
但是我有几点不明白,第一次接触mysql,呵呵。
1.为什么用客户端工具navicat调用时可以?
2.为什么自增列+1了?
2、按道理讲,如果没有COMMIT,自增字段不会加1,要看看MYSQL的源码才行。
一:插入代码本身就造成了出错导致的回滚。
二:你用了事务,如果你没有COMMIT的话,同样会造成数据没有被提交。
在你的C#代码中的catch{}里加上异常信息输出语句,看看问题究竟是不是由于原因一造成的,若不是就是原因二了。