Daniel Andrei Popescu Ответов: 1

Как я могу вставить значения из двух таблиц в третью?


Всем привет,

В настоящее время я борюсь с вставкой некоторых значений из регистрационной формы в базу данных.У меня есть 2 таблицы,в которые я хочу вставить данные:RegisterTeacher и TeacherCourses.теперь у меня есть проблема с логикой здесь,хотя я искал в интернете, чтобы увидеть различные возможности сделать это.Вот эти таблицы:
CREATE TABLE [dbo].[RegisterTeacher] (
    [SNTeacher] INT            NOT NULL,
    [UserName]  NVARCHAR (50)  NOT NULL,
    [pwd]       INT            NOT NULL,
    [fullName]  NVARCHAR (MAX) NOT NULL,
    [education] NVARCHAR (50)  NULL,
    PRIMARY KEY CLUSTERED ([SNTeacher] ASC)
);

CREATE TABLE [dbo].[AvailableCourses] (
    [courseName] NVARCHAR (MAX) NOT NULL,
    [education]  NVARCHAR (50)  NOT NULL,
    [ClassID]    NVARCHAR (50)  NULL,
    [courseID]   INT            NOT NULL,
    PRIMARY KEY CLUSTERED ([courseID] ASC)
);

CREATE TABLE [dbo].[TeacherCourses] (
    [courseID]  INT        NOT NULL,
    [SNTeacher] INT        NOT NULL,
    [IDKey]     NCHAR (10) NOT NULL,
    PRIMARY KEY CLUSTERED ([IDKey] ASC),
    CONSTRAINT [FK_TeacherCourses_ToTable] FOREIGN KEY ([SNTeacher]) REFERENCES [dbo].[RegisterTeacher] ([SNTeacher]),
    CONSTRAINT [FK_TeacherCourses_ToTable_1] FOREIGN KEY ([courseID]) REFERENCES [dbo].[AvailableCourses] ([courseID])
);



Теперь я хочу добиться следующего:для таблицы RegisterTeacher она работает для сохранения значений,так как я делаю это следующим образом:
connectionString = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\User\\Desktop\\BackupVersion\\LastAndFinalVersion\\DatabaseStudents.mdf;Integrated Security=True";
          using (SqlConnection con = new SqlConnection(connectionString))
          {
              sql = "Insert into RegisterTeacher(SNTeacher,UserName,pwd,fullName,education)values(@SNTeacher,@UserName,@pwd,@fullName,@education)";

              con.Open();
              using (SqlCommand cmd = new SqlCommand(sql, con))
              {
                  cmd.Parameters.AddWithValue("@SNTeacher", SqlDbType.Int).Value=SNTeacher;
                  cmd.Parameters.AddWithValue("@UserName", SqlDbType.NVarChar).Value = UserName;
                  cmd.Parameters.AddWithValue("@pwd", SqlDbType.Int).Value = pwd ;
                  cmd.Parameters.AddWithValue("@fullName", SqlDbType.NVarChar).Value = fullName ;
                  cmd.Parameters.AddWithValue("@education", SqlDbType.NVarChar).Value=education;
                  cmd.ExecuteNonQuery();
              }

Моя проблема заключается в том, что я хочу сохранить имя курса в таблице TeacherCourses.Я хотел бы сохранить как SNTeacher, так и courseName-где courseName берется из AvailableCourses и передается со ссылкой courseID на таблицу TeacherCourses вместе с SNTeacher из таблицы RegisterTeacher.Как будет выглядеть синтаксис?

Что я уже пробовал:

Я попробовал сделать следующее:Я сделал отдельный запрос для вставки данных в TeacherCourses:
using (SqlCommand com = new SqlCommand(query, con))
                      {
                  query = "Insert into TeacherCourses (courseID,SNTeacher) select courseID,SNTeacher from RegisterTeacher p inner join AvailableCourses c ON p.courseID=c.courseID  AND p.SNTeacher=c.SNTeacher";
                  SelectedCourses = new ObservableCollection<AvailableCours>();
                  foreach (var item in Courses)
                  {

                      if (item.IsChecked)
                      {
                          SelectedCourses.Add(item);

                      }
                      com.Parameters.AddWithValue("@courseName", SqlDbType.NVarChar).Value = item.courseName;

                      com.ExecuteNonQuery();

1 Ответов

Рейтинг:
0

Richard Deeming

Попробуйте что-нибудь вроде этого:

using (SqlCommand com = new SqlCommand("", con))
{
    var query = new System.Text.StringBuilder();
    query.Append("INSERT INTO TeacherCourses (courseID, SNTeacher) SELECT courseID, @SNTeacher FROM AvailableCourses WHERE courseName IN (");
    
    bool started = false;
    foreach (var item in Courses)
    {
        if (item.IsChecked)
        {
            string name = "@courseName" + com.Parameters.Count;
            com.Parameters.AddWithValue(name, item.courseName);
            
            if (started) query.Append(',');
            query.Append(name);
            started = true;
        }
    }
    
    if (started)
    {
        query.Append(')');
        com.CommandText = query.ToString();
        com.Parameters.AddWithValue("@SNTeacher", SNTeacher);
        com.ExecuteNonQuery();
    }
}


Daniel Andrei Popescu

Здравствуйте, сэр, и спасибо вам за ваш ответ.Я не мог ответить раньше из-за некоторых проблем в моем коде.У меня есть ошибка относительно сопоставления с AvailableCourses,так как SNTeacher-это не столбец из AvailableCourses, а только CourseID...It-к сожалению, не работает.