我在一个唯一的列上插入一个插入,系统返回一个错误,说我不能插入重复的行。我怎样才能忽略C#中的这个错误?如何忽略SQL错误? - C#
编辑 不使用try/catch语句
见this question我为什么要忽略错误。
我在一个唯一的列上插入一个插入,系统返回一个错误,说我不能插入重复的行。我怎样才能忽略C#中的这个错误?如何忽略SQL错误? - C#
编辑 不使用try/catch语句
见this question我为什么要忽略错误。
使用Try/Catch并对catch执行任何操作。
当然这意味着记录不会被插入,也不会像@recursive提到的那样解决潜在的问题,但它会忽略错误。
如果你想插入一个新行然后摆脱导致这种情况发生的属性值,如Id字段或其他东西。
编辑
如果它是一个命中次数,那么你想要做一个更新查询,我认为是你来自哪里。你不想做一个检查,然后插入/更新权利?
我想你可能会更好使用数据存储库并将对象保留在内存中。如果有一个id分配给对象,那么你在计数器上进行更新,如果没有,那么插入一个,然后你将ID存储在对象中。
Google Analytics(分析)可以检查页面上的点击次数? Lot很容易,大多数免费且几乎没有代码。那是可行的吗?
是否有可能没有try/catch?我的代码的这个区域会被执行几次 – Luke101 2009-10-28 03:16:56
如果你想忽略它,抓SQLEXCEPTION把它吞了......
try
{
// code that calls the database insert
}
catch(SqlException) { /* swallow */ }
如果你可以切换到使用一个存储过程,然后简单地窝插入一个条件块,检查里面对于受骗者第一...
If Not Exists (Select * From Table
Where PK = @PkValue)
Insert Table (ColNames here)
Values(input parameters here, including PKvalue)
错字中的catch – 2009-10-28 03:15:10
什么?没有SqException?谢谢!修正它... – 2009-10-28 13:05:29
是否有可能没有尝试/赶上?我的代码的这个区域将被执行多次 – Luke101 2009-10-28 15:42:54
用途:
try {
...sql statement execution...
} catch (SqlException ex) {
..do stuff here...
}
是否有可能没有try/catch?我的代码的这个区域将被执行多次 – Luke101 2009-10-28 15:41:46
实在没有办法瓦特/出做一个初始选择或尝试捕获...
如果您使用支持存储过程的数据库,则可以通过在存储过程中执行select操作,然后仅在存在没有记录。
还有一篇关于您链接到的文章的建议,值得一试,您可以使用where子句编写插入内容。我不确定语法是否正确,但可能值得一试。
Insert TableName ([column list])
Select Distinct @PK, @valueA, @ValueB, etc. -- list all values to be inserted
From TableName
Where Not Exists
(Select * From TableName
Where PK == @PK)
以如下方式使用存储过程。请注意,error_number()
来自定义的错误 - 当它插入具有唯一键的副本或PK约束时。谷歌如果你想了解更多关于具体号码的细节
BEGIN TRY
insert into table values(x,y,x)
END TRY
BEGIN CATCH
IF ERROR_NUMBER() = 2627 OR ERROR_NUMBER() = 2601
-- this is a duplicate so just do nothing
ELSE
RAISERROR ('Error with Insert', -- Message text.
16, -- Severity.
1 -- State.
);
END CATCH
你为什么要忽略它?你最好不要插入重复的行。 – recursive 2009-10-28 03:10:40
我正在实现每个文章ID都有唯一IP的点击数数据库。我试图避免提出两个疑问。这就是为什么我想忽略这些错误。 – Luke101 2009-10-28 03:16:12
SQL Server是否支持INSERT ... ON DUPLICATE KEY UPDATE样式语法?这听起来像你所需要的。 – 2009-10-28 03:23:24