我在mvc框架中使用一个存储过程的代码。我有一个字段WorkOverDate来选择一个日期并将其保存在Unit表中。保存后,我想把这个日期添加到另一个叫WorkOver的表中。问题来了,当我试图调用api中的存储过程的函数,更新Unit中的信息时,我得到了这样的结果:加载资源失败:服务器响应状态为500()我不知道该怎么做。我在页面中修改的所有内容都能正确保存,但存储过程却无法工作。非常感谢任何建议。
我有一个UnitRepository文件,其中有以下代码。
public void UpdateWorkOver()
{
using (var cmd = _db.Database.GetDbConnection().CreateCommand())
{
cmd.CommandText = "dbo.WorkOverAddDate";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
bool isOpen = cmd.Connection.State == ConnectionState.Open;
if (!isOpen)
{
cmd.Connection.Open();
}
cmd.ExecuteNonQuery();
if (!isOpen)
{
cmd.Connection.Close();
}
}
}
这个存储过程是:
CREATE PROCEDURE [dbo].[WorkOverAddDate]
AS
INSERT INTO dbo.WorkOver
(UnitID, WODate, CreatedBy, Created)
SELECT UnitID, WODate, CreatedBy, Created
FROM dbo.WorkOver
UNION
SELECT ID, WorkOverDate, UpdatedBy, Updated
FROM dbo.Unit
另外,我有一个API,当我保存页面时,我调用了存储过程的函数:
/编辑
unit.Updated = DateTime.Now;
unit.UpdatedBy = _securityHelper.CurrentUserID.ToString();
_auditHelper.After = unit;
_repoUnit.Edit(unit);
if (unit.WorkOverDate != null)
{ ((UnitRepository)_repoUnit).UpdateWorkOver(); }
问题是,我不得不添加在存储过程中。
Where WorkOverDate IS NOT NULL
作为一个空参数不能被添加到一个不可空的列。现在它的工作。