2015-03-29 10 views
1

Ниже Query работает в HeidiSQL, но дает мне ошибку при попытке использовать его в C#Query работает в HeidiSQL, но не в C#

SELECT title.id,title.title,title.production_year,movie_info.info FROM title NATURAL JOIN movie_info WHERE title.id <= 1000; 

Это говорит мне следующее:

Error

Я использую следующий код для извлечения MySqlDataReader объекта:

public override MySqlDataReader Retrieve(string sql) 
{ 
    MySqlCommand cmd = new MySqlCommand(sql, GetConnection()); 
    return cmd.ExecuteReader(); 
} 

I вызов из моего основного метода:

static void Main(string[] args) 
{ 
    MySQLFacade facade = new MySQLFacade("127.0.0.1", "omitted", "omitted", "imdb"); 
    MySqlDataReader reader = facade.Retrieve(
     "SELECT title.id,title.title,title.production_year,movie_info.info" + 
     "FROM title " + 
     "NATURAL JOIN movie_info" + 
     " WHERE title.id <= 1000;"); 
    using (reader) 
    { 
     while (reader.Read()) 
     { 
      for (int i = 0; i < reader.FieldCount; i++) 
      { 
       Console.WriteLine(reader.GetValue(i)); 
      } 
      Console.WriteLine(); 
     } 
    } 
    Console.ReadLine(); 
} 

Am Я, возможно, не хватает кое-что о форматировании строки SQL для использования в C# по сравнению с менеджером баз данных?

ответ

2

Там в пространство отсутствует, прежде чем FROM:

MySqlDataReader reader = facade.Retrieve(
"SELECT title.id,title.title,title.production_year,movie_info.info" + // <-- here 
"FROM title " + 
"NATURAL JOIN movie_info" + 
" WHERE title.id <= 1000;"); 

В своем ответе, вы положили все в одну линию, и вы добавили недостающее пространство.

+0

Ах да, это делает гораздо больше смысла, ха-ха. Благодаря! – OmniOwl

0

Используйте @ для нескольких линий, то лучше и всегда использовать параметры, чтобы избежать SQL инъекций:

static void Main(string[] args) 
{ 
    MySQLFacade facade = new MySQLFacade("127.0.0.1", "omitted", "omitted", "imdb"); 
    MySqlDataReader reader = facade.Retrieve(
     @"SELECT title.id,title.title,title.production_year,movie_info.info 
     FROM title 
     NATURAL JOIN movie_info 
     WHERE title.id <= 1000"); 
    using (reader) 
    { 
     while (reader.Read()) 
     { 
      for (int i = 0; i < reader.FieldCount; i++) 
      { 
       Console.WriteLine(reader.GetValue(i)); 
      } 
      Console.WriteLine(); 
     } 
    } 
    Console.ReadLine(); 
} 
+0

Какая разница с @? – OmniOwl

+1

@ перед текстом позволяет писать на многострочных линиях, не требуя для пользователя конца «+» на каждой строке, и это дает пробел между словами, когда вы переходите к новой строке. –

+0

А, спасибо вам за это. – OmniOwl