編集しやすいように、コマンドを複数の行に分割します。
string docommand = "";
docommand += "DROP TABLE IF EXISTS `config`;";
//docommand += "/*!40101 SET @saved_cs_client = @@character_set_client */;";
//docommand += "/*!40101 SET character_set_client = utf8 */;";
docommand += "CREATE TABLE `config` (";
docommand += " `name` varchar(200) NOT NULL,";
docommand += " `value` varchar(200) NOT NULL,";
docommand += " `timestamp` int(11) NOT NULL,";
docommand += " UNIQUE KEY `name` (`name`)";
docommand += ")";
//docommand += " ENGINE=MyISAM DEFAULT CHARSET=latin1";
docommand += ";";
//docommand += "/*!40101 SET character_set_client = @saved_cs_client */;";
mysql_connect connect = new mysql_connect();
MySqlConnection conn = connect.connect(core_config.server, core_config.database, core_config.username, core_config.pass);
bool success = mysql_command.command(docommand, conn);
connect.disconnect();
if (!success)
Console.WriteLine("Command failed : " + docommand);
ご覧のとおり、問題が発生しているかどうかを確認するために、いくつかの行をコメントアウトしました。違いはありませんでした。
出力:
Returning false because resultSet is 0
Command failed : DROP TABLE IF EXISTS `config`;CREATE TABLE `config` ( `name` varchar(200) NOT NULL, `value` varchar(200) NOT NULL, `timestamp` int(11) NOT NULL, UNIQUE KEY `name` (`name`));
しかし、テーブルは正しく作成されています...そして、まったく同じコマンドを貼り付けてphpmyadmin
そこから実行すると、問題はまったく報告されません。
コマンド like"SELECT * FROM config"
は失敗を報告しません。では、なぜ CREATE TABLE コマンドがそうするのでしょうか?
mysql_command.command()関数:
public static bool command(string input, MySqlConnection con)
{
try
{
MySqlCommand command = new MySqlCommand(input, con);
var resultSet = command.ExecuteNonQuery();
if (!resultSet.Equals(0))
{
return true;
}
Console.WriteLine("Returning false because resultSet is 0");
return false;
}
catch (Exception ex) { Console.WriteLine("MySQL command error : "+ex.Message); }
Console.WriteLine("Returning false after exception");
return false;
}