所以我有两个ObservableCollections:
ObservableCollection<Student> studentslist
ObservableCollection<Subject> subjectslist
我将它们传递给与sql数据库建立了完整通信的类。
学生列表包含以下人员传递的值:
StudentsList.Add(new Student { IdStudent = newStudentId, Name = NameBox.Text, Surname = SurnameBox.Text, Index = IndexBox.Text })
主题列表包含列表框中已选中复选框的值(我仍然不确定这是否正确):
var selectedSubjects = SubjectList.Where(subjects => subjects.IsChecked == true);
var selectedSubjectsCollection = new ObservableCollection<Subject>(selectedSubjects);
这是我的Subject类:
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)
就我能从数据库中读取数据而言,我不知道如何以正确的方式将这些值传递给数据库中的相应值。
答案 0 :(得分:1)
我喜欢使用存储过程来做这种事情,以最大程度地减少应用程序中的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
返回方法(例如),以便我可以传递一些数据,例如插入行的ID。