如何在DotNetNuke模块中将项目更新发送到数据库?

时间:2013-02-15 03:34:02

标签: c# sql dotnetnuke

我是DotNetNuke的新手,我正在创建一个新模块,我正在试图弄清楚在数据库中上传数据的最佳方式是什么。

我使用了这段代码:

public void UpdateStudentByID(int studentID, Student student)
{
    using (IDataContext ctx = DataContext.Instance())
    {
        var rep = ctx.GetRepository<Student>();
        rep.Update(student);
    }
}

但问题是它没有更新数据库中的任何内容,当我检查SQL配置文件时,我发现它生成了这个查询:

exec sp_executesql N'UPDATE [Attendance_Students] SET [Surname] = @0, [GivenNames] = @1, [Birthdate] = @2, [Gender] = @3, [Address1] = @4, [Address2] = @5, [State] = @6, [PostCode] = @7, [Notes] = @8, [CreatedByUserId] = @9, [LastModifiedOnDate] = @10 WHERE [StudentId] = @11',N'@0 nvarchar(4000),@1 nvarchar(4000),@2 datetime,@3 nvarchar(4000),@4 nvarchar(4000),@5 nvarchar(4000),@6 nvarchar(4000),@7 nvarchar(4000),@8 nvarchar(4000),@9 int,@10 datetime,@11 int',@0=N'Good',@1=N'Good',@2='2013-02-20 00:00:00',@3=N'Male',@4=N'dsfdfsdfdf',@5=N'',@6=N'SA',@7=N'',@8=N'good',@9=1,@10='2013-02-15 02:58:39.047',@11=0

从查询中可以明显看出,没有为更新特定项目而生成条件。

那么将对象更新到数据库的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

您传入的Student对象没有将其StudentId属性设置为值 - 这就是为什么您的where条件试图更新studentid = 0的原因。在调用函数之前设置值,你应该是好的去。

通过这样做,您不需要调用UpdateStudentByID传递studentId和student,而只需调用UpdateStudent并传递学生。

...
//Before calling UpdateStudent, make sure your StudentId property is set
student.StudentId = 123;
....

public void UpdateStudent(Student student)
{
    using (IDataContext ctx = DataContext.Instance())
    {
        var rep = ctx.GetRepository<Student>();
        rep.Update(student);
    }
}

希望这有帮助。