Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为一个查询连接3个表_C#_Sql_Database_Ms Access 2013 - Fatal编程技术网

C# 为一个查询连接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

我对我的查询有一个问题,我已经调查过了,但在我看来它是正确的

因此,我有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();
如果我试着只使用两个表,它是有效的,但是让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太通用了,可能包含太多引擎。请添加一些解释。解释为什么你的代码应该工作。