C# 链接到Sql-更新数据库时出现的问题

C# 链接到Sql-更新数据库时出现的问题,c#,asp.net,linq-to-sql,C#,Asp.net,Linq To Sql,我是Linq的新手,在更新我的dabase时遇到了一些问题。 我不知道使用全局数据上下文是否真的发生了这种情况,或者我遗漏了什么。 我在名称空间AlpaCommon中有我的类型化DataContex和一个静态公共变量来初始化它,如下所示: 我的部分数据上下文******************* // partial datacontext class namespace AlpaCommon { public partial class AlpaDataContext : System.Dat

我是Linq的新手,在更新我的dabase时遇到了一些问题。 我不知道使用全局数据上下文是否真的发生了这种情况,或者我遗漏了什么。 我在名称空间AlpaCommon中有我的类型化DataContex和一个静态公共变量来初始化它,如下所示:

我的部分数据上下文*******************

// partial datacontext class
namespace
AlpaCommon
{
public partial class AlpaDataContext : System.Data.Linq.DataContext
{

//Insert method is working...
public void InsertAnimal2(Animal instance)
{
Animais.InsertOnSubmit(instance);
SubmitChanges();
} 

//Delete method is working...
public void DeleteAnimal2(int animalID)
{
var animal = (from a in Animais where a.AnimalID == animalID select a).First();
Animais.DeleteOnSubmit(animal);
SubmitChanges();
}



//Update method IS NOT working...
public void UpdateAnimal2(Animal newAnimal)
{.
var animal = (from a in Animais where a.AnimalID == newAnimal.AnimalID select a).First();
animal = newAnimal;
SubmitChanges();
}
//global DataContext instance
namespace AlpaCommon
{
public static class Globals
{
public static AlpaDataContext db = new AlpaDataContext();
using AlpaCommon;
namespace Animais
{
public partial class Altera : System.Web.UI.Page
{

protected void btnUpdate_Click(object sender, EventArgs e)
{
try
{

//cria um novo Objeto do tipo Animal
Animal animalAltera = new Animal();
//set new values 
animalAltera.AnimalID = Convert.ToInt32(Request.Params["AnimalID"]);
animalAltera.Castrado = CastradoCheckBox.Checked;
animalAltera.DisponivelAdocao = DisponivelCheckBox.Checked;
animalAltera.Adotado = AdotadoCheckBox.Checked;
animalAltera.Nome = NomeTextBox.Text;
animalAltera.Tipo = TipoDropDownList.SelectedValue;
animalAltera.Sexo = SexoDropDownList.SelectedValue;
animalAltera.Descricao = DescricaoTextBox.Text;
animalAltera.Local = LocalTextBox.Text;
animalAltera.Foto = AlteraFoto(); 

AlpaCommon.Globals.db.UpdateAnimal2(animalAltera);

redirect = redirectSucesso;

}
catch
{
redirect = redirectErro;
}
finally
{

Helper.Redirect(redirect);
}
} 
这就是我实例化datacontext的地方,以及我在整个应用程序中需要的其他变量*************

// partial datacontext class
namespace
AlpaCommon
{
public partial class AlpaDataContext : System.Data.Linq.DataContext
{

//Insert method is working...
public void InsertAnimal2(Animal instance)
{
Animais.InsertOnSubmit(instance);
SubmitChanges();
} 

//Delete method is working...
public void DeleteAnimal2(int animalID)
{
var animal = (from a in Animais where a.AnimalID == animalID select a).First();
Animais.DeleteOnSubmit(animal);
SubmitChanges();
}



//Update method IS NOT working...
public void UpdateAnimal2(Animal newAnimal)
{.
var animal = (from a in Animais where a.AnimalID == newAnimal.AnimalID select a).First();
animal = newAnimal;
SubmitChanges();
}
//global DataContext instance
namespace AlpaCommon
{
public static class Globals
{
public static AlpaDataContext db = new AlpaDataContext();
using AlpaCommon;
namespace Animais
{
public partial class Altera : System.Web.UI.Page
{

protected void btnUpdate_Click(object sender, EventArgs e)
{
try
{

//cria um novo Objeto do tipo Animal
Animal animalAltera = new Animal();
//set new values 
animalAltera.AnimalID = Convert.ToInt32(Request.Params["AnimalID"]);
animalAltera.Castrado = CastradoCheckBox.Checked;
animalAltera.DisponivelAdocao = DisponivelCheckBox.Checked;
animalAltera.Adotado = AdotadoCheckBox.Checked;
animalAltera.Nome = NomeTextBox.Text;
animalAltera.Tipo = TipoDropDownList.SelectedValue;
animalAltera.Sexo = SexoDropDownList.SelectedValue;
animalAltera.Descricao = DescricaoTextBox.Text;
animalAltera.Local = LocalTextBox.Text;
animalAltera.Foto = AlteraFoto(); 

AlpaCommon.Globals.db.UpdateAnimal2(animalAltera);

redirect = redirectSucesso;

}
catch
{
redirect = redirectErro;
}
finally
{

Helper.Redirect(redirect);
}
} 
这是对update方法的调用******************************

// partial datacontext class
namespace
AlpaCommon
{
public partial class AlpaDataContext : System.Data.Linq.DataContext
{

//Insert method is working...
public void InsertAnimal2(Animal instance)
{
Animais.InsertOnSubmit(instance);
SubmitChanges();
} 

//Delete method is working...
public void DeleteAnimal2(int animalID)
{
var animal = (from a in Animais where a.AnimalID == animalID select a).First();
Animais.DeleteOnSubmit(animal);
SubmitChanges();
}



//Update method IS NOT working...
public void UpdateAnimal2(Animal newAnimal)
{.
var animal = (from a in Animais where a.AnimalID == newAnimal.AnimalID select a).First();
animal = newAnimal;
SubmitChanges();
}
//global DataContext instance
namespace AlpaCommon
{
public static class Globals
{
public static AlpaDataContext db = new AlpaDataContext();
using AlpaCommon;
namespace Animais
{
public partial class Altera : System.Web.UI.Page
{

protected void btnUpdate_Click(object sender, EventArgs e)
{
try
{

//cria um novo Objeto do tipo Animal
Animal animalAltera = new Animal();
//set new values 
animalAltera.AnimalID = Convert.ToInt32(Request.Params["AnimalID"]);
animalAltera.Castrado = CastradoCheckBox.Checked;
animalAltera.DisponivelAdocao = DisponivelCheckBox.Checked;
animalAltera.Adotado = AdotadoCheckBox.Checked;
animalAltera.Nome = NomeTextBox.Text;
animalAltera.Tipo = TipoDropDownList.SelectedValue;
animalAltera.Sexo = SexoDropDownList.SelectedValue;
animalAltera.Descricao = DescricaoTextBox.Text;
animalAltera.Local = LocalTextBox.Text;
animalAltera.Foto = AlteraFoto(); 

AlpaCommon.Globals.db.UpdateAnimal2(animalAltera);

redirect = redirectSucesso;

}
catch
{
redirect = redirectErro;
}
finally
{

Helper.Redirect(redirect);
}
} 

我没有捕获任何异常,它只是不更新数据库。我的更新或调用方法中是否缺少某些内容?我期待你的建议

多谢各位


Josimari Martarelli

问题在于你的动物=新动物;UpdateAnimal2中的语句。请记住,该上下文中的动物只是一个引用,您只是将该引用分配给未连接到DataContext的动物。首先从dataContext获取动物,而不是调用animalAltera=new animal();然后,调用SubmitChanges()。或者,您可以使用DataContext的Attach()方法附加新的Animal()对象,然后提交。

问题在于您的Animal=newAnimal;UpdateAnimal2中的语句。请记住,该上下文中的动物只是一个引用,您只是将该引用分配给未连接到DataContext的动物。首先从dataContext获取动物,而不是调用animalAltera=new animal();然后,调用SubmitChanges()。或者,您可以使用DataContext的Attach()方法附加新的Animal()对象,然后提交。

在UpdateAnimal2()方法中,请注意DataContext在赋值之前与Animal关联。赋值后,DataContext仍然与该动物关联,但变量只是指向不同的对象。DataContext对这个新对象一无所知,事实上,如果该对象是由不同的DataContext创建的,那么在处理它时就会出现问题。相反,您应该指定所有动物的属性以匹配新动物的属性。赋值在此上下文中不能完成任何操作。

在UpdateAnimal2()方法中,请注意,DataContext在赋值之前与animal关联。赋值后,DataContext仍然与该动物关联,但变量只是指向不同的对象。DataContext对这个新对象一无所知,事实上,如果该对象是由不同的DataContext创建的,那么在处理它时就会出现问题。相反,您应该指定所有动物的属性以匹配新动物的属性。在这种情况下,赋值并不能完成任何任务。

将每个属性从新对象复制到旧对象很好:

公共无效更新EANIMAL2(动物动物界)

{

//查询特定的动物

var animal=(来自Animais中的a)

其中a.AnimalID==animalAltera.AnimalID

选择a.First()

animalAltera.AnimalID=animalAltera.AnimalID

animalAltera.Castrado=animalAltera.Castrado

animal.DisponivelAdocao=animalAltera.DisponivelAdocao

animal.Adotado=animalAltera.Adotado

animalAltera.Nome=animalAltera.Nome

animalAltera.Tipo=animalAltera.Tipo

animalAltera.Sexo=animalAltera.Sexo

animalAltera.descripao=animalAltera.descripao

animalAltera.Local=animalAltera.Local

animalAltera.Foto=animalAltera.Foto

提交更改()

}

附加不起作用,因为我没有时间戳字段,并且认为现在没有必要。(我将有一个用户管理员更新主页) 唯一麻烦的是,如果我的表结构发生了变化,那么将每个属性从新对象分配到旧对象将需要额外的工作。。。
谢谢你

将每个属性从新对象复制到旧对象效果很好:

公共无效更新EANIMAL2(动物动物界)

{

//查询特定的动物

var animal=(来自Animais中的a)

其中a.AnimalID==animalAltera.AnimalID

选择a.First()

animalAltera.AnimalID=animalAltera.AnimalID

animalAltera.Castrado=animalAltera.Castrado

animal.DisponivelAdocao=animalAltera.DisponivelAdocao

animal.Adotado=animalAltera.Adotado

animalAltera.Nome=animalAltera.Nome

animalAltera.Tipo=animalAltera.Tipo

animalAltera.Sexo=animalAltera.Sexo

animalAltera.descripao=animalAltera.descripao

animalAltera.Local=animalAltera.Local

animalAltera.Foto=animalAltera.Foto

提交更改()

}

附加不起作用,因为我没有时间戳字段,并且认为现在没有必要。(我将有一个用户管理员更新主页) 唯一麻烦的是,如果我的表结构发生了变化,那么将每个属性从新对象分配到旧对象将需要额外的工作。。。
谢谢你

将标题从链接更改为Linq将标题从链接更改为Linq