C# 为一个查询连接3个表
我对我的查询有一个问题,我已经调查过了,但在我看来它是正确的 因此,我有3个带有以下字段的表C# 为一个查询连接3个表,c#,sql,database,ms-access-2013,C#,Sql,Database,Ms Access 2013,我对我的查询有一个问题,我已经调查过了,但在我看来它是正确的 因此,我有3个带有以下字段的表 Game GameID, GameName, GenreID, ConsoleID Genre GenreID, GenreName Console ConsoleID, ConsoleName 这就是我写的问题 connection.Open(); OleDbCommand command = new OleDbCommand(); command.Connection = connection
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();
如果我试着只使用两个表,它是有效的,但是让3个表工作会不断抛出错误。
有什么想法吗
编辑
解决方案
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)";
它需要括号,因为access一次只能联接一个表。
感谢大家的建议和帮助,即使您的字符串变量名在执行sql select查询时被称为update也没什么大不了的,但显然会让其他人感到困惑。现在,为了处理额外的空格或缺少空格,有时我发现使用@so cr/lf来处理文本字符串会更好,因为它们是完整的,并且可以显示更容易的可读性。。。差不多
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;
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 ";
所以现在,在查询中没有多余空间或不存在的混淆。。。并且所有原始表/别名引用都是正确的大小写引用,因此不应该有任何无效的别名引用
我还遇到了编译的字符串内容有点不好的问题,即使您在引号中键入的内容看起来是正确的。解决这个问题的唯一方法是删除所有
"part "+
"part2 " +
"part3 "
是将所有连接的字符串移回一行,如
"part part2 part3"
然后重新编译。。。但是,通过@的文本字符串也可能会修复它。请发布您得到的错误?错误到底是什么?为什么命名查询更新?如果在SQL Server Management Studio中运行该查询,是否会出错?错误到底是什么?错误显示为Console.ConsoleI而不是Console.ConsoleIDIts仍然抛出相同的错误。这些表编写正确,因为我只使用游戏和流派以及游戏和控制台表进行了查询,它们以datagrid格式显示。就在使用所有3个表时errors@Kaertserif,对于grins,您是否尝试过删除所有+段并将其放在一行上的单个字符串中,这对阅读不实用,但我看到了这种情况。如果是这样的话,它是否仍然对ConsoleI和ConsoleID感到困惑???检查表结构以确认?在表结构中,它也是一个I like ID或L like字母。我知道我们都认为应该是ID,但谁知道呢。@Kaertserif,但是列名呢。。。真的是我对身份对身份。。。您是否可以选择删除流派表和列引用,并查看它是否仅适用于游戏+控制台表?更糟糕的是,只查询控制台表,看看它到底有什么?结果是access只支持一种表连接。所以我需要添加括号来逐个添加表。谢谢你的帮助tho@Kaertserif,这听起来一点也不正确,而且,为了将来,请编辑您的问题,将Access作为标记之一。SQL太通用了,可能包含太多引擎。请添加一些解释。解释为什么你的代码应该工作。