使用vb.net检查sql数据库中的重复记录

时间:2013-05-04 08:00:15

标签: sql-server vb.net

假设我的表格包含两列IDName

并假设我的存储过程在vb.net上运行,将行插入数据库。

但是,当点击ADD按钮时,我的系统需要检查数据库中是否已存在输入文本框中的ID

CREATE PROCEDURE AddOfficeEquipmentProfile
(
@OE_ID      varchar(11),    
@OE_Category        char(3) =NULL,      
@OE_SubCategory char(3)=    NULL,       
@OE_Name        varchar(35)=NULL,       
@OE_User        varchar(35)=NULL,   
@OE_Brand       varchar(15)=NULL,   
@OE_Model       varchar(35)=NULL,   
@OE_Specs       varchar(1000)=NULL,     
@OE_SerialNo        varchar(35)=NULL,   
@OE_PropertyNo  varchar(35)=NULL,   
@OE_MacAddress  varchar(100)=NULL,      
@OE_Static_IP       varchar(15)=NULL,   
@OE_Vendor      varchar(35)=NULL,   
@OE_PurchaseDate    smalldatetime,      
@OE_WarrantyInclusiveYear   int=NULL,   
@OE_WarrantyStatus  char(2)=    NULL,   
@OE_Status      varchar(15)=NULL,       
@OE_Dept_Code   char(3)=    NULL,   
@OE_Location_Code   char(8)=    NULL,       
@OE_Remarks     varchar(1000)=  NULL
)
AS

INSERT INTO tblOfficeEquipmentProfile (OE_ID, OE_Category, OE_SubCategory, OE_Name, OE_User, OE_Brand, OE_Model, OE_Specs, OE_SerialNo,
OE_PropertyNo, OE_MacAddress, OE_Static_IP, OE_Vendor, OE_PurchaseDate, OE_WarrantyInclusiveYear, OE_WarrantyStatus, OE_Status, OE_Dept_Code,
OE_Location_Code, OE_Remarks ) 
VALUES (@OE_ID, @OE_Category, @OE_SubCategory, @OE_Name, @OE_User, @OE_Brand, @OE_Model, 
@OE_Specs, @OE_SerialNo, @OE_PropertyNo, @OE_MacAddress, @OE_Static_IP, @OE_Vendor, @OE_PurchaseDate, @OE_WarrantyInclusiveYear, @OE_WarrantyStatus,
@OE_Status, @OE_Dept_Code, @OE_Location_Code, @OE_Remarks)

GO

4 个答案:

答案 0 :(得分:3)

你可以做的事情

  1. 将ID列设为primary key,插入时,如果重复,则会出现异常
  2. 您可以使用自动增量ID,然后您不需要检查ID退出。数据库将处理
  3. 如果您不能执行上述操作,请运行select语句或存储过程以检查ID是否存在。

答案 1 :(得分:0)

如果这是针对SQL Server并且您正在使用存储过程 - 只需尝试以下内容:

CREATE PROCEDURE AddOfficeEquipmentProfile
(
   @OE_ID      varchar(11),    
    ..... all your other parameters here.....
)
AS 
   IF NOT EXISTS (SELECT * FROM dbo.tblOfficeEquipmentProfile WHERE OE_ID = @OE_ID) 
       INSERT INTO dbo.tblOfficeEquipmentProfile(.... list of columns.....)
       VALUES (......list of values................)

假设OE_ID是您的主键并且是唯一的。只检查@OE_ID是否尚不存在,如果不存在 - 请插入数据。如果存在 - 不要做任何事情。

答案 2 :(得分:0)

以@marc_s的答案为基础。为了在数据库中已存在具有相同id的行的情况下向用户显示消息,您可以从查询执行结果中检查受影响的行数。

这假设存储过程仅在id不存在时才插入行,并且不会发出任何错误/异常。

使用ADO.NET(使用现有命令执行存储过程):

Dim affectedRows as Integer = command.ExecuteNonQuery()
If affectedRows = 0 Then
    'Handle the error here
    MessageBox.Show("There is already a Profile with the supplied id")
Else
    'Insert was made
End If

答案 3 :(得分:0)

检查以下文章以创建SP在任何表中查找重复行:

http://www.codeproject.com/Articles/157977/Remove-Duplicate-Rows-from-a-Table-in-SQL-Server