3

MySql を使用した C# で、存在する場合にのみテーブルを削除したい。

次のコードを検討してください。

namespace CSharpMySqlSample
{
   class Example2
   {
      static void Main()
      {
         String str = @"server=localhost; database=sakila; uid=root;                password=root;";
         MySqlConnection con = null;
         try
         {
            con = new MySqlConnection(str);
            con.Open(); //open the connection        
            String cmdText = @"drop table `sakila`.`testable` if exists"; // this one drops a table 
            MySqlCommand cmd = new MySqlCommand(cmdText, con);
            cmd.Prepare();
            cmd.ExecuteNonQuery(); //execute the mysql command
         }
         catch (MySqlException err)
         {
            String outp = err.ToString();
            Console.WriteLine("Error: " + err.ToString());
         }
         finally
         {
            if (con != null)
            {
               con.Close(); //close the connection
            }
         } //remember to close the connection after accessing the database
      }
   }
}

それは生産しました:

「MySql.Data.MySqlClient.MySqlException: SQL 構文にエラーがあります。MySql.Data の 1 行目の「if exists」の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください\r\n .MySqlClient.MySqlStream.ReadPacket()\r\n で MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& addedId)\r\n で MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertId)\r\n MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) で\r\n MySql.Data.MySqlClient.MySqlDataReader.NextResult()で\r\n MySql.Data.MySqlClientで.MySqlCommand.ExecuteReader(CommandBehavior 動作)\r\n で MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()\r\n で MySql.Data.MySqlClient.MySqlCommand.CSharpMySqlSample.Example2.Main() で ExecuteNonQuery()\r\n

では、クエリの何が問題なのですか?

4

4 に答える 4

1

次のように入力します。

String cmdText = @"drop table `sakila`.`testable`";

「存在する場合」なし

そしてcatchに何も追加しないでください。テーブルが削除されるかどうかは、エラーなしで存在するかどうかに依存します:)

于 2013-11-07T23:04:41.590 に答える