Как я могу добавить новую строку в базу данных со значениями, хранящимися в ObservableCollection? - PullRequest
2 голосов
/ 09 апреля 2019

Итак, у меня есть две ObservableCollections:

ObservableCollection<Student> studentslist
ObservableCollection<Subject> subjectslist

, и я передаю их в класс, где я установил полное взаимодействие с базой данных sql.

список студентов содержит значения, передаваемые:

StudentsList.Add(new Student { IdStudent = newStudentId, Name = NameBox.Text, Surname = SurnameBox.Text, Index = IndexBox.Text })

subjectlist содержит значения из отмеченных флажков в моем списке (я все еще не уверен, правильно ли это):

var selectedSubjects = SubjectList.Where(subjects => subjects.IsChecked == true);
var selectedSubjectsCollection = new ObservableCollection<Subject>(selectedSubjects);

, и это мой предметный класс:

public class Subject
    {
        public int IdSubject{ get; set; }
        public string subject{ get; set; }
        public bool IsChecked { get; set; }


        public override string ToString()
        {
            return $"{subject}";
        }
    }

Теперь в моем классе, отвечающем за соединение с базой данных sql, я создал метод, который захватывает обе эти коллекции и на основании их значений я хотел бы создать новую запись в базе данных:

public void addRecord(ObservableCollection<Student> studentslist, ObservableCollection<Przedmiot> subjectslist)
        {
            OpenConection();
            //...
            CloseConnection();
        }

В базе данных у меня есть таблица ученика:

Student(IdStudent, FirstName, LastName, IndexNumber)

и таблица предмета:

Subject(IdSubject, Name)

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

1 Ответ

1 голос
/ 09 апреля 2019

Мне нравится делать подобные вещи, используя хранимые процедуры, чтобы минимизировать количество кода T-SQL в приложении.

Примером может быть:

public static void InsertSubject(Przedmiot subject)
{
    using (SqlConnection conn = new SqlConnection("Connection String"))
    {
        try
        {
            SqlCommand command = new SqlCommand("dbo.InsertSubject", conn) { CommandType = CommandType.StoredProcedure };

            command.Parameters.Add(new SqlParameter("@IdSubject", subject.IdSubject));
            command.Parameters.Add(new SqlParameter("@Name", subject.subject));

            conn.Open();

            command.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            // handle exceptions
        }
    }
}

Тогда у вас будет хранимая процедура с той же подписью для выполнения INSERT, т.е. :

CREATE PROCEDURE dbo.InsertSubject
    @IdSubject int
    , @Name varchar(50)
AS

...

GO

Если вы хотите передать всю коллекцию, вы можете реализовать цикл foreach в приведенном выше примере.

Лично мне нравится вызывать эти методы один раз для каждой вставки и использовать его как int метод возврата (например), чтобы я мог передать некоторые данные, например, идентификатор вставленной строки.

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