2012-07-02 39 views
-1

我有一个人们用来更新数据库中记录的形式视图。但最初记录不存在,所有字段将显示其默认值。首次单击提交按钮时,应该在数据库中创建记录。后续提交应更新现有记录。记录由它的主键标识,通过Request.QueryString传递给页面。ASP.net - 插入记录,如果没有,

不ASP.net提供这样的一个简单的办法,或者我需要推出自己的执行插入/更新的逻辑?

+0

如果在查询字符串的ID,你不已经知道,它需要更新? –

+0

没有,因为我有一个一对一关系的两个表。它们共享相同的密钥,但如果用户选择填写一个特定的形式记录在其他表对只会存在。 – Trent

回答

2
UPDATE dbo.table SET col = @col WHERE id = @id; 

IF @@ROWCOUNT = 0 
BEGIN 
    INSERT dbo.table(id, col) SELECT @id, @col; 
END 

在2008+你也可以使用MERGE但我发现的语法相当艰巨(和它不会从潜在的冲突隔离你,以及你可能会认为它)。

+0

我最终这样做了,尽管我认为有必要在事务中使用“set transaction isolation level serializable”。否则,两个线程可以同时执行update语句,并且都会接收@@ rowcount = 0(如果记录还没有出现),这会导致一个线程在插入时获得PK违例。 – Trent

2

阅读的价值,做一个GET请求到数据源/ Repositary。检查此密钥是否已存在实体/记录。如果是,请调用Update方法,否则插入。

像这样的事情

//check the queystring param value is valid numeric expression 
//before trying to convert 

int itemId=Convert.ToInt32(Request.QueryString["itemId"]); 

var item=repo.GetItemById(itemId); 
if(item==null) 
{ 
    repo.InsertItem(item); 
} 
else 
{ 
    repo.UpdateItem(); 
} 

假设repo是你Repositary实现的一个目标,你必须出现在插入和UupdateItem方法将做数据的更新用/插入到你的持续性存储。

相关问题