>

학교 프로젝트를하고 있습니다

밴드의 모든 정보를 얻고 싶습니다. 잘 작동합니다. 내가 장르에 도착할 때까지. 밴드는 여러 장르를 가질 수 있고 그 반대도 가능하기 때문에 조금 특별합니다.

그래서 SQL에는 테이블 밴드, 테이블 장르 및 테이블 Band_Genre가 있습니다. 내부 조인을하면

SELECT * 
FROM Band 
INNER JOIN Band_Genre 
        ON Band.ID = Band_Genre.BandID

SQL에서는 모든 것이 잘 작동하지만 그 문장으로 두 번째 독자를 시도하면 null을 반환합니다.

그러나 내가 지금하고 싶은 것은 ID가 아닌 장르 자체로 데이터 그리드를 채우는 것입니다. 그래서 내가 생각하는 것은 Inner join에서 ID를 가져 와서 Genre.Name에 연결해야한다는 것입니다.

아마도 조금 멀지 만 누군가가 이미 ID를 ObservableCollection에 가져올 수 있다면 기쁠 것입니다. 데이터 그리드에 장르 : 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>


  • 답변 # 1

    무엇을하고 싶은지 잘 모르겠다 ... 두 번째 리더는 테이블에 올바른 데이터가 없으면 장르 정보가없는 한 null을 반환하지 않아야합니다. 장르의 경우 장르에 속하기를 원하십니까?

    SELECT g.*
    FROM Band b
    INNER JOIN Band_Genre bg
        ON b.ID = bg.BandID
    INNER JOIN Genre g on g.GenreID = bg.GenreID
    
    

    장르 정보를 반환합니다. 그러나 두 번째 리더가 null 인 경우 Band_Genre가 채워지지 않았거나 잘못된 ID가있는 것처럼 보이므로 밴드 테이블에 조인 할 수 없습니다

    수정

    하나의 쿼리로 모두 원한다면 :

    SELECT b.*, g.*
    FROM Band b
    INNER JOIN Band_Genre bg
        ON b.ID = bg.BandID
    INNER JOIN Genre g on g.GenreID = bg.GenreID
    
    

  • 이전 python - sikuli - for 루프/if else 문이 제대로 작동하지 않음
  • 다음 node.js - node --experimental-modules, 요청 된 모듈은 이름 지정된 내보내기를 제공하지 않습니다