【发布时间】:2020-09-17 17:16:34
【问题描述】:
我必须更新一个表,但它什么也没做。在编辑我的值的视图中,它“工作”,但是当我单击提交更改时,它不会更改数据库中的任何值。我真的卡住了,我检查了这些文件,但我看不出问题出在哪里。
这是我的 .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值在表中具有匹配的行吗?另外,您能否打开 SQL 分析器并查看 DB 正在接收什么查询。 -
您能否向我们展示您在 C# 代码中用于连接此 SQL Server 的连接字符串?
-
它会抛出错误吗?如果没有,您是否在更新方法中放置了一个断点以确保它被调用?
-
Thimmarasu Lanka,谢谢你的回答,我不知道 SQL 分析器,当我使用它时,@id 为 0,所以这就是问题所在。我检查了文件,但我还没有看到问题。我有一个查找功能,它工作正常。
-
它不会抛出任何错误。
标签: c# sql-server asp.net-mvc stored-procedures