c# - 更新功能不起作用,SQL Server 和 ASP.NET MVC 5
问题描述
我必须更新一个表,但它没有做任何事情。在编辑我的值的视图中,它“工作”,但是当我单击提交更改时,它不会更改数据库中的任何值。我真的被卡住了,我检查了这些文件,但我看不出问题出在哪里。
这是我的 .cs 文件
public void update(Propietario objPropietario)
{
try
{
comando = new SqlCommand("spEditarPropietario", objConexion.getConexion());
comando.CommandType = CommandType.StoredProcedure;
comando.Parameters.AddWithValue("@id", objPropietario.IdPropietario);
comando.Parameters.AddWithValue("@Nombre", objPropietario.Nombre);
comando.Parameters.AddWithValue("@IdTipoDocumento", objPropietario.TipoDocumento);
comando.Parameters.AddWithValue("@ValorDocumento", objPropietario.ValorDocumentoId);
objConexion.getConexion().Open();
comando.ExecuteNonQuery();
}
catch (Exception)
{
throw;
}
finally
{
objConexion.getConexion().Close();
objConexion.cerrarConexion();
}
}
桌子:
CREATE TABLE [dbo].[Propietario]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[IdTipoDocumento] [int] NOT NULL,
[Nombre] [varchar](100) NOT NULL,
[ValorDocumento] [varchar](30) NULL,
CONSTRAINT [PK_Propietario]
PRIMARY KEY CLUSTERED ([ID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Propietario] WITH CHECK
ADD CONSTRAINT [FK_Propietario_TipoDocumentoId]
FOREIGN KEY([IdTipoDocumento]) REFERENCES [dbo].[TipoDocumentoId] ([ID])
GO
ALTER TABLE [dbo].[Propietario] CHECK CONSTRAINT [FK_Propietario_TipoDocumentoId]
GO
这是我正在使用的存储过程:
CREATE PROCEDURE spEditarPropietario
(@id int,
@Nombre VARCHAR(100),
@IdTipoDocumento int,
@ValorDocumento VARCHAR(30))
AS
BEGIN
UPDATE [dbo].Propietario
SET Nombre = @Nombre,
IdTipoDocumento = @IdTipoDocumento,
ValorDocumento = @ValorDocumento
WHERE ID = @id
END
这是我的控制器:
[HttpGet]
public ActionResult Update(int ID)
{
Propietario objpropietario = new Propietario(ID);
objetoPropietario.find(objpropietario);
return View(objpropietario);
}
[HttpPost]
public ActionResult Update(Propietario objpropietario)
{
objetoPropietario.update(objpropietario);
return RedirectToAction("Inicio");
}
我有这种查找方法,并且效果很好。
public bool find(Propietario objpropietario)
{
bool hayRegistros;
try
{
comando = new SqlCommand("spVerPropietario",
objConexion.getConexion());
comando.CommandType = CommandType.StoredProcedure;
comando.Parameters.AddWithValue("@ID",
objpropietario.IdPropietario);
objConexion.getConexion().Open();
SqlDataReader read = comando.ExecuteReader();
hayRegistros = read.Read();
if (hayRegistros)
{
objpropietario.IdPropietario =
Convert.ToInt32(read[0].ToString());
objpropietario.Nombre = read[1].ToString();
objpropietario.TipoDocumento =
Convert.ToInt32(read[2].ToString());
objpropietario.ValorDocumentoId = read[3].ToString();
objpropietario.EstadoError = 99;
}
else
{
objpropietario.EstadoError = 1;
}
}
catch (Exception)
{
throw;
}
finally
{
objConexion.getConexion().Close();
objConexion.cerrarConexion();
}
return hayRegistros;
}
这是存储过程:
CREATE PROCEDURE spVerPropietario
(@ID int)
AS
BEGIN
SELECT ID, Nombre, IdTipoDocumento, ValorDocumento
FROM [dbo].Propietario
WHERE ID = @ID
END
解决方案
我修复了将 id 的新参数添加到控制器中的 Update 方法,因为对象将 id 更改为 0,这就是它不起作用的原因。解决方案:
public ActionResult Update(Propietario objpropietario, int ID)
{
objpropietario.IdPropietario = ID;
objetoPropietario.update(objpropietario);
//return Content(obj.propietario.Nombre
//return View(objpropietario);
return RedirectToAction("Inicio");
}
只有这样,它才能正常工作。
推荐阅读
- c# - WebAPI 核心使用异步控制器返回内部服务器错误
- angular - Angular 8中每小时刷新令牌的问题
- laravel - Laravel 资源控制器动态显示总结果
- gis - 如何在浏览器中索引geojson数据以存储在indexDB中(使用geojson-vt)
- ios - 单击加号添加应用程序错误 500。没有应用程序显示
- django - 为本地开发者设置 django-celery-email
- mysql - 如何修复我的 sequalize 连接错误?
- python - 如何在我的工作网络中部署 wep abb?
- mysql - 无法使用 node express 和 ejs 在 html 页面上显示 express 验证器生成的错误
- pandas - Pandas:考虑不同实体的最大值,在时间范围内求和