2016-08-01 3 views
0

У меня есть вкладка для курсов (CID, CName), а в другой таблице представлены майоры для каждого курса CourseMajor (CID, MNom).JOIN SQL не работает, как должно быть

У меня есть список рассвета, который имеет майоры чисел. если пользователь выбирает основной номер из списка, должен быть заполнен еще один список курсов, выбранных из выбранного основного.

У меня есть приведенный ниже код, покажи мне все курсы не только по курсам для выбранного основного номера! Я использовал LEFT JOIN, RIGHT JOIN, INNER JOIN, FULL OUTER JOIN .... и никто из них не работает.

Примечание: Я использую C#, ASP.NET, VS.NET ...

using (SqlConnection con = new SqlConnection(conStr)) 
     { 
      using (SqlCommand cmd = new SqlCommand("SELECT * FROM TBCourse FULL JOIN TbCourseMajor ON TBCourse.CId = TbCourseMajor.CId AND TbCourseMajor.MNom = '" + DLMNom.SelectedValue + "' ", con)) 
      { 
       con.Open(); 
       cmd.ExecuteNonQuery(); 
       SqlDataReader reader = cmd.ExecuteReader(); 
       if (reader.HasRows) 
       { 
        reader.Read(); 


        while (reader.Read()) 
        { 
        DLCName.Items.Add(new ListItem(reader["CName"].ToString(), reader["CNom"].ToString())); 

        } 
       } 
       else { TxtCRN.Text = "Not worked"; } 
      } 
     } 

Это некоторые подробности о таблицах:

CREATE TABLE [dbo].[TBCourse] (
    [CId] INT   IDENTITY (1, 1) NOT NULL, 
    [CNom] INT   NOT NULL, 
    [CName] NVARCHAR (50) NOT NULL, 
    [Chours] NCHAR (10) NOT NULL, 
    CONSTRAINT [PK_TBCourse] PRIMARY KEY CLUSTERED ([CId] ASC) 
); 


CREATE TABLE [dbo].[TbCourseMajor] (
    [CId] INT NOT NULL, 
    [MNom] INT NOT NULL, 
    PRIMARY KEY CLUSTERED ([CId] ASC), 
    FOREIGN KEY ([CId]) REFERENCES [dbo].[TBCourse] ([CId]), 
    FOREIGN KEY ([MNom]) REFERENCES [dbo].[TbMajor] ([MNom]) 
); 
+1

Если вы хотите видеть только курсы из выбранного основного номера, вы должны использовать 'INNER JOIN'. Если это не работает, вам нужно рассказать нам больше о вашей схеме базы данных (как «TBCourse» относится к «TbCourseMajor»), предоставить некоторые примеры данных и рассказать нам, что вы получаете, когда вы выбираете конкретный основной номер. –

+0

Да. Каждый раз, когда пользователь меняет майор, вы должны повторно запросить SQL, чтобы получить список курсов для этого основного. Однако я считаю, что между ними должна быть справочная таблица, потому что один курс может быть включен в более чем один майор. –

+0

devlan carnage Спасибо за повтор. INNER JOIN дает 0 строк после выполнения. Я напишу подробности о таблицах выше. – AL3MS

ответ

0

Проблема была, как Девлин резня сказал база данных (в хранимых данных), вторая таблица имеет проблему (не хранить данные), она показывает null .. Я создал другую таблицу с теми же данными, и она отлично работает. Спасибо всем и жаль, что не смог определить проблему из начало.

Смежные вопросы