我正在创建一个链接到在线MySql数据库的小型c#应用程序,以进一步了解这两件事。
在我的数据库中,我有2个表“user”和“dvd”,它们的构建如下:
我现在要做的是从每个表中取一个列并在dataGridView中显示它们。 我想要的colum是来自table dvd:TITEL和表用户:GEBRUIKERSNAAM。
DVD使用表用户的ID和表dvd中的外键USERID链接到用户(一个用户多个DVD)。
因此,我希望在我的dataGridView中显示2个用于dvd标题的列和用于DVD的所有者的第一个用于第一个(女巫是GEBRUIKRSNAAM列)。
为此,我编写了以下代码:
SELECT 'TITEL', dvd.TITEL
FROM xxx.dvd
UNION ALL
SELECT 'GEBRUIKERSNAAM', user.GEBRUIKERSNAAM
FROM xxx.user
INNER JOIN xxx.dvd ON user.ID = dvd.USERID
WHERE user.ID = xxx.dvd.USERID;
然而,这给了我两个问题:
如果我直接在我的数据库上使用它(使用来自的SQL选项卡) phpMyAdmin)它可以工作,但将2个colums合并为一个我不想要的。我认为这里的问题是“全联盟”,但我不知道怎么做。
如果我尝试使用我的c#应用程序使用此代码,我会收到以下错误:“功能SelectCommand.Connection未初始化”。我知道问题是在这个查询中有一些问题,因为如果我尝试使用不同的查询,我的代码就像它应该的那样工作。 (它填充dataGridView)。
try
{
MySqlCommand SelectCommand = new MySqlCommand("SELECT TITEL FROM xxx.dvd UNION ALL SELECT GEBRUIKERSNAAM FROM xxx.user INNER JOIN xxx.dvd ON user.ID = dvd.USERID WHERE user.ID = xxx.dvd.USERID;");
myConn.Open();
MySqlDataAdapter sda = new MySqlDataAdapter();
sda.SelectCommand = SelectCommand;
DataTable dbdataset = new DataTable();
sda.Fill(dbdataset);
BindingSource bSource = new BindingSource();
bSource.DataSource = dbdataset;
dataGridView1.DataSource = bSource;
sda.Update(dbdataset);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
myConn.Close();
欢迎任何有关此问题的帮助,提示或正确的做法(最佳做法) 感谢
答案 0 :(得分:0)
我并不完全清楚你的目标是什么,但也许其中一部分可以帮助你:
SELECT U.GEBRUIKERSNAAM, D.TITLE
FROM dvd D JOIN user U ON D.USERID = U.ID
WHERE D.ID = 1
这将采用dvd表,并为每个条目查找ID与D.USERID匹配的用户。从该合并行中,它将选择U.GEBRUIKERSNAAM和D.TITLE,但仅限于dvd ID为1的结果。
如果还有其他问题,请发表评论。我希望我能正确理解你的目标。如果你给我一个你想要的输出应该是什么样子的例子可能会更容易。让我写下查询。
答案 1 :(得分:0)
如果我正确理解您的问题,那么您需要显示2列,您可以在其中显示用户已经雇用DVD的那些,您应该使用该查询:
选择d.TITLE,u.GEBRUIKERSNAAM 来自dvd d 内部联接用户u ON u.ID = d.USERID