2013-11-07 4 views
3

Я хочу отказаться от таблицы, только если она существует, в C# с 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 для правильного синтаксиса для использования рядом с 'if exists' в строке 1 \ r \ n на MySql.Data.MySqlClient.MySqlStream.ReadPacket() \ r \ n на MySql.Data.MySqlClient.NativeDriver. GetResult (Int32affectedRow, Int64 & insertedId) \ г \ п на MySql.Data.MySqlClient.Driver.GetResult (Int32 StatementId, Int32 & affectedRows, Int64 & insertedId) \ г \ п на MySql.Data.MySqlClient.Driver. NextResult (Int32 StatementId, булева сила) \ г \ п на MySql.Data.MySqlClient.MySqlDataReader.NextResult() \ г \ п на MySql.Data.MySqlClient.MySqlCommand.ExecuteReader (CommandBehavior поведение) \ г \ п на MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() \ г \ п на MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() \ г \ п на CSharpMySqlSample.Example2.Main()

В чем проблема с запросом?

ответ

6

Попробуйте это:

DROP TABLE IF EXISTS sakila.testtable; 
2

Попробуйте вместо этого:

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

Также убедитесь, что пользователь базы данных, которые ваша программа работает под управлением имеет разрешения необходимого падения таблицы, но вы увидите, что сразу же, когда вы пытаетесь запустить это: -)

+0

Не знал, что MySQL имеет функцию OBJECT_ID() ' –

+0

Черт. По какой-то причине я думал, что он использует T-SQL (MS-SQL Server). Виноват. – HaukurHaf

2

if exists должен идти перед именем таблицы. Читайте docs ....

String cmdText = @"drop table if exists 'sakila'.'testable'"; 
1

только тип:

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

без «если существует»

и не добавляйте ничего в уловом так вы будете иметь таблицы удалены или не зависит от того, существует ли это или нет без ошибок :)

Смежные вопросы