我的查询存在问题,我已经调查了它,但看起来对我来说是正确的。
所以我有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)";
它需要括号,因为访问一次只能连接一个表。 感谢大家的建议和帮助
答案 0 :(得分:0)
即使您的字符串变量名称被调用"更新"当它做一个sql-select查询没什么大不了的,但显然混淆了别人。现在,为了处理额外的空间(或缺少空间),有时我发现使用" @"更好地做文字字符串。所以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"
然后重新编译......但也许文字字符串(通过" @")也会修复它。
答案 1 :(得分:-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;