在Gridview中更新时发生Db4objects.Db4o.Ext.DatabaseClosedException

在Gridview中更新时发生Db4objects.Db4o.Ext.DatabaseClosedException,gridview,db4o,Gridview,Db4o,我试图通过使用Gridview控件制作一个可以编辑、更新和删除对象的项目,每次存储新对象时都会出现dbclosed异常错误。事实上,我找不到我是在哪里出错的。我对.NET的DB4o编程非常陌生,我找不到任何可以学习基础知识的好的源代码,所以任何参考资料都将不胜感激。提前谢谢 //页面加载 Db4oService.OpenDB(); using (var patientdbcontainer = Db4oService.PatientDBContainer)

我试图通过使用Gridview控件制作一个可以编辑、更新和删除对象的项目,每次存储新对象时都会出现dbclosed异常错误。事实上,我找不到我是在哪里出错的。我对.NET的DB4o编程非常陌生,我找不到任何可以学习基础知识的好的源代码,所以任何参考资料都将不胜感激。提前谢谢

//页面加载

     Db4oService.OpenDB();
     using (var patientdbcontainer = Db4oService.PatientDBContainer)
                    {
                       var list = patientdbcontainer.Query<Patient>(typeof(Patient)).ToList<Patient>();


                       GridView1.DataSource = list;
                       GridView1.DataBind();
                    }
Db4oService.OpenDB();
使用(var patientdbcontainer=Db4oService.patientdbcontainer)
{
var list=patientdbcontainer.Query(typeof(Patient)).ToList();
GridView1.DataSource=列表;
GridView1.DataBind();
}
//更新

public void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            //var ID = new Guid((string)e.NewValues["ID"]);

            //    var Name = (string)e.NewValues["Name"];
            //    var IMEI = long.Parse(e.NewValues["IMEI"].ToString());

            Patient updatedPatient = new Patient()
            {
                ID = new Guid((string)e.NewValues["ID"]),
                IMEI =long.Parse(e.NewValues["IMEI"].ToString()),
                Name = (string)e.NewValues["Name"]
            };
            Patient deprecatedPatient;
            using (var patientdbcontainer = Db4oService.PatientDBContainer)
            {

                deprecatedPatient = patientdbcontainer.Query<Patient>(typeof(Patient)).Where<Patient>(n => n.ID == (new Guid((string)e.NewValues["ID"]))).FirstOrDefault<Patient>();
               // deprecatedPatient.Name = ((TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0]).Text;
                deprecatedPatient.ID = updatedPatient.ID;
                deprecatedPatient.Name = updatedPatient.Name;
                patientdbcontainer.Delete(deprecatedPatient);

                patientdbcontainer.Store(updatedPatient);
                patientdbcontainer.Commit();

                GridView1.EditIndex = -1;
                GridView1.DataBind();




            }
public void GridView1\u行更新(对象发送方,GridViewUpdateEventArgs e)
{
//var ID=newguid((字符串)e.NewValues[“ID”]);
//var Name=(字符串)e.NewValues[“Name”];
//var IMEI=long.Parse(例如NewValues[“IMEI”].ToString());
患者更新患者=新患者()
{
ID=新Guid((字符串)e.NewValues[“ID”]),
IMEI=long.Parse(例如NewValues[“IMEI”].ToString()),
Name=(字符串)e.NewValues[“Name”]
};
患者不推荐患者;
使用(var patientdbcontainer=Db4oService.patientdbcontainer)
{
deprecatedPatient=patientdbcontainer.Query(typeof(Patient))。其中(n=>n.ID==(新Guid((字符串)e.NewValues[“ID]”)))。FirstOrDefault();
//deprecatedPatient.Name=((文本框)GridView1.Rows[e.RowIndex]。单元格[1]。控件[0])。文本;
deprecatedPatient.ID=updatedPatient.ID;
deprecatedPatient.Name=updatedPatient.Name;
patientdbcontainer.Delete(不推荐的患者);
patientdbcontainer.Store(updatedPatient);
patientdbcontainer.Commit();
GridView1.EditIndex=-1;
GridView1.DataBind();
}
1)如果我理解您的代码,可能最好让患者使用id,更新属性并存储更改(无需创建和删除)

(二) 你可以试试

本项目的重点是使用ASP.NET。源代码中有一个使用CRUD操作的ASP.NET示例(源代码文件夹Examples/AspNetWebSolutions


这个项目也有一个Nuget包,有一个小的示例实现:

我尝试在不删除和创建的情况下完成它,再次使用ODS,即使我可以在存储之前显示更新的值,行存储抛出异常。我只想开发一个工具,我可以在网站或WinForms上编辑/更新,但特别是错误处理无法实现db4o的od。可能是容器/服务器的问题。Asp.net中的最佳选项是在IObjectServer/IObjectContainer的生命周期中使用HttpModule(像UsefulDB4O一样)。是否可以发布堆栈跟踪?