我的代码应该只更新表中的单个特定行。我使用一个简单的过程来更新当前应用程序中的记录,除了这种情况外,它运行没有任何问题。每次运行查询时,它实际上都会插入一个新行,而不仅仅是更新现有行:
所以这是我的c#代码:
try
{
command.Parameters.Clear();
command.Parameters.AddRange(vars);
command.CommandText = "Update" + tableName;
conn.Open();
command.ExecuteNonQuery();
conn.Close();
this.GetData(tableName);
}
catch
{
throw;
}
这是我的SQL代码(请输入'Alter Procedure'语句,我只想获得该程序的核心脚本):
ALTER procedure [dbo].[UpdateExpenditureItems]
(@ID int,
@Name nvarchar(50),
@IsGroup bit,
@Parent nvarchar(50),
@Description nvarchar(50)
)
AS
Begin
--a new inserted row seems to be a result of running IF statement rather than ELSE
if @Parent != null
begin
declare @ParentID int
set @ParentID = (select ID from ExpenditureItems where Name=@Parent);
UPDATE ExpenditureItems SET Name =@Name, Parent =@ParentID, [Description] =@Description, IsGroup = @IsGroup WHERE ID=@ID;
end
else
begin
UPDATE ExpenditureItems SET Name =@Name, [Description] =@Description WHERE ID=@ID
end
end
由于声誉限制,我无法发布截图... 提前谢谢。
答案 0 :(得分:1)
@Parent != null
这不是你在SQL中检查null的方法
将其更改为:
@Parent is not null
答案 1 :(得分:0)
原因是当前表单是从另一个继承的,当我按下OK按钮时,基类的OK按钮单击事件首先被触发,然后是孩子。
解决方案:要么以运行基类按钮单击事件结束,要么使用virtual和override来覆盖基类方法。