为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用存储在 ObservableCollection 中的值向数据库添加新行?

如何使用存储在 ObservableCollection 中的值向数据库添加新行?

C#
ABOUTYOU 2022-12-04 11:11:30
所以我有两个 ObservableCollections:ObservableCollection<Student> studentslistObservableCollection<Subject> subjectslist我将它们传递给我已经建立了与 sql 数据库的整个通信的类。studentslist 包含以下传递的值: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);这是我的主题类: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 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

我喜欢使用存储过程来做这种事情,以最大限度地减少应用程序中的 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。


查看完整回答
反对 回复 2022-12-04
  • 1 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信