Я работаю над школьным проектомSQL Внутренний отчет о присоединении в C#
Я хочу получить всю информацию о полосах, которая отлично работает. Пока я не попаду в жанры. Жанр немного особенный, потому что группа может иметь несколько жанров и наоборот.
Таким образом, в SQL у меня есть таблица Bands, таблица Жанр и таблица Band_Genre Если я сделать внутреннее соединение там
SELECT *
FROM Band
INNER JOIN Band_Genre
ON Band.ID = Band_Genre.BandID
Все отлично работает в SQL, но когда я пытаюсь второго читателя с этим утверждением он возвращает null.
Но то, что я хочу сделать сейчас, заполняет datagrid самими жанрами, а не идентификаторами. Так что я думаю, что мне нужно, чтобы получить идентификатор из внутреннего соединения и связать его с Genre.Name
Может быть, это идет немного далеко, но я был бы рад, если бы кто-то мог уже получить идентификатор по обратным ObservableCollection. Итак, в Datagrid показаны жанры: 1, 3, например.
Заранее спасибо
C#
//Property
private ObservableCollection<Genre> genres;
public ObservableCollection<Genre> Genres
{
get { return genres; }
set { genres = value; }
}
//Method
public static ObservableCollection<Band> GetBands()
{
ObservableCollection<Band> list = new ObservableCollection<Band>();
try
{
string provider = ConfigurationManager.ConnectionStrings["ConnectionString"].ProviderName;
string connectionstring = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
DbConnection con = DbProviderFactories.GetFactory(provider).CreateConnection();
con.ConnectionString = connectionstring;
con.Open();
DbCommand command = DbProviderFactories.GetFactory(provider).CreateCommand();
command.CommandType = System.Data.CommandType.Text;
command.Connection = con;
command.CommandText = "SELECT * FROM Band";
//Bands ophalen
DbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Band b = new Band()
{
ID = reader["ID"].ToString(),
Name = reader["Name"].ToString(),
Picture = reader["Picture"].ToString(),
Description = reader["Description"].ToString(),
Twitter = reader["Twitter"].ToString(),
Facebook = reader["Facebook"].ToString(),
//Genres = (Genre)reader["Genres"] lijst van genres kunnen doorgeven, probleem met meerdere genres per band. Kijken filmpje inner joint
};
if (!DBNull.Value.Equals(reader["Picture"]))
{
b.Picture = reader["Picture"].ToString();
}
else
{
b.Picture = null;
}
list.Add(b);
}
//Genres ophalen via INNER JOIN
DbCommand command2 = DbProviderFactories.GetFactory(provider).CreateCommand();
command2.CommandType = System.Data.CommandType.Text;
command2.Connection = con;
command2.CommandText = "SELECT * FROM Band INNER JOIN Band_Genre On Band.ID = Band_Genre.BandID";
//Bands ophalen
DbDataReader reader2 = command2.ExecuteReader();
while (reader2.Read())
{
Genre g = new Genre()
{
ID = reader2["GenreID"].ToString(),
//Name = reader2[
};
}
reader.Close();
reader2.Close();
con.Close();
}
XAML:
<DataGrid.Columns>
<DataGridTextColumn Header="Band" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Picture" Binding="{Binding Picture}" />
<DataGridTextColumn Header="Description" Binding="{Binding Description}"/>
<DataGridTextColumn Header="Twitter" Binding="{Binding Twitter}" />
<DataGridTextColumn Header="Facebook" Binding="{Binding Facebook}" />
<DataGridTextColumn Header="Genres" Binding="{Binding Genres}" />
</DataGrid.Columns>
</DataGrid>
ID = reader2 [ "GenreID"] ToString(), используйте точку с запятой и точкой с запятой после} удалить его – Mihai
Это не проблема, когда я устанавливаю точку останова на DbDataReader reader2 = command2.ExecuteReader(). Я получаю нуль. Таким образом, ошибка до этого. – user2827958