2015-06-29 2 views
1

У меня возникла проблема с моим запросом, я изучил его, но он выглядит правильно для меня.присоединение 3 таблицы для запроса

Итак, у меня есть 3 таблицы со следующими полями.

Game 
GameID, GameName, GenreID, ConsoleID 

Genre 
GenreID, GenreName 

Console 
ConsoleID, ConsoleName 

Это запрос, который я написал.

connection.Open(); 
OleDbCommand command = new OleDbCommand(); 
command.Connection = connection; 

string update = "SELECT Game.GameID, Game.GameName, Genre.GenreName, Console.ConsoleName "+ 
       "FROM Game "+ 
       "INNER JOIN Genre ON Game.GenreID=Genre.GenreID "+ 
       "INNER JOIN Console ON Game.ConsoleID=Console.ConsoleID"; 
command.CommandText = update; 
OleDbDataAdapter da = new OleDbDataAdapter(command); 
DataTable dt = new DataTable(); 
da.Fill(dt); 
DGV_searchResults.DataSource = dt; 

connection.Close(); 

Это работает, если я пытаюсь использовать только 2 таблицы, но получение 3 на работу продолжает бросать ошибки. Любые идеи?

EDIT this is the error!

РЕШЕНИЕ

string update = "SELECT Game.GameID, Game.GameName, Genre.GenreName, Console.ConsoleName 
FROM ((Game INNER JOIN Genre ON Game.GenreID=Genre.GenreID) 
INNER JOIN Console ON Game.ConsoleID=Console.ConsoleID)"; 

Она нуждается в круглые скобки, как доступ может присоединиться только одну таблицу в то время. спасибо всем за предложения и помощь

+10

, пожалуйста, сообщите об ошибке, которую вы получите? – ughai

+4

Что такое ошибка _exactly_? –

+1

Почему вы назвали свой запрос «обновлением»? – ataravati

ответ

-1
SELECT Game.GameID, Game.GameName, Genre.GenreName, Console.ConsoleName 
FROM Game 
    INNER JOIN Genre ON Game.GenreID=Genre.GenreID 
    INNER JOIN Console ON Game.ConsoleID=Console.ConsoleID; 
+0

Пожалуйста, добавьте некоторое объяснение. Объясните, почему ваш код должен работать. – Nilambar

0

Даже если ваша строка имя переменной не называется «обновление», когда он делает SQL-запрос выбора является не большая проблема, но, видимо, смущен кого-то другого. Теперь, когда вы имеете дело с дополнительными пробелами (или их отсутствием), иногда мне лучше делать буквальные строки с помощью «@», поэтому cr/lf остаются нетронутыми, а также может показывать более удобную читаемость ... что-то вроде

string update = 
@"SELECT 
     Game.GameID, 
     Game.GameName, 
     Genre.GenreName, 
     Console.ConsoleName 
    FROM 
     Game 
      INNER JOIN Genre 
       ON Game.GenreID = Genre.GenreID 
      INNER JOIN Console 
       ON Game.ConsoleID = Console.ConsoleID "; 

Итак, в запросе нет путаницы лишнего пространства или нет, и все ваши исходные ссылки на таблицы/псевдонимы были правильной ссылкой на Case, поэтому у вас не должно быть никаких недопустимых ссылок псевдонимов.

Я также столкнулся с проблемами как-то плохого содержимого строки, скомпилированного, даже если то, что вы вводите в кавычки, выглядит правильно. Единственный способом исправить это был путем удаления всех

"part "+ 
    "part2 " + 
    "part3 " 

были удалить все сцепленные строки обратно в одну линию, как

"part part2 part3" 

затем перекомпилировать ... Но, может быть, символьную строку (через «@») также исправит это.

+0

Его по-прежнему бросает ту же ошибку. таблицы написаны правильно, так как я сделал запрос только с игрой и жанром, а также с игровыми и консольными таблицами, и они отлично отображаются в datagrid. просто при использовании всех 3 таблиц это ошибки – Kaertserif

+0

@Kaertserif, для усмешек, вы попытались удалить все сегменты + и поместить в одну строку (все на одной строке и не практично для чтения, но я видел, что это произошло). Если да, то все еще запутано в отношении «ConsoleI» против «ConsoleID»? Проверить структуру таблицы для подтверждения?Также это «я», как «ID» или «L», как «L» etter в структуре таблицы. Я знаю, что мы оба считаем, что это должен быть «ID», но кто знает. – DRapp

+0

По-прежнему такая же ошибка, даже если все это на одной строке – Kaertserif

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