3

I want to drop a table only if it exists , in C# with MySql .

Consider the following code:

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
      }
   }
}

It produced :

"MySql.Data.MySqlClient.MySqlException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'if exists' at line 1\r\n at MySql.Data.MySqlClient.MySqlStream.ReadPacket()\r\n at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)\r\n at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId)\r\n at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)\r\n at MySql.Data.MySqlClient.MySqlDataReader.NextResult()\r\n at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)\r\n at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()\r\n at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()\r\n at CSharpMySqlSample.Example2.Main()

So what's wrong with the query ?

4

4 回答 4

6

尝试这个:

DROP TABLE IF EXISTS sakila.testtable;
于 2013-11-07T22:52:39.340 回答
2

试试这个:

String cmdText = @"IF OBJECT_ID('sakila'.'testable', 'U') IS NOT NULL DROP TABLE 'sakila'.'testable'";

还要确保运行您的程序的数据库用户具有删除表的必要权限,但是当您尝试运行时您会立即看到:-)

于 2013-11-07T22:52:17.800 回答
2

if exists需要放在表名之前。阅读文档....

String cmdText = @"drop table if exists 'sakila'.'testable'"; 
于 2013-11-07T22:55:10.793 回答
1

只需输入:

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

没有“如果存在”

并且不要在catch中添加任何内容,因此您将删除或不删除表,这取决于它是否存在而没有任何错误:)

于 2013-11-07T23:04:41.590 回答