【问题标题】:Check for duplicate records in sql database using vb.net使用 vb.net 检查 sql 数据库中的重复记录
【发布时间】:2013-05-04 08:00:14
【问题描述】:

假设我的表包含两列 IDName

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

但是当点击添加按钮时,我的系统需要检查在文本框中输入的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

【问题讨论】:

    标签: sql-server vb.net


    【解决方案1】:

    你可以做的几件事

    1. 将ID列设为primary key,插入时重复出现异常
    2. 您可以使用自动递增ID,那么您不需要检查ID退出与否。数据库会处理这个
    3. 如果以上都做不到,运行select语句或者存储过程来检查id是否存在。

    【讨论】:

    • ID 已经是主键先生,但是当我继续单击添加按钮时系统崩溃。你能建议语法吗?
    • 。 . .如果您选择 3,请将其包装在事务中。
    【解决方案2】:

    如果这是针对 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 是否尚不存在,如果不存在 - 插入数据。如果存在 - 不要做任何事情。

    【讨论】:

    • 是的,先生,这是用于 sql server im 使用存储过程并在 vb.net 上执行它
    • @ivandinglasan:更新了我的答案以使用您的表和存储过程名称
    • 为了通知用户由于数据库中已经存在重复的 id 而无法插入值,您需要在应用程序中检查执行查询的结果。如果受影响的行数为0,则存在重复的id。
    • @marc_s 我试试代码先生,如果我不能让它工作,我们可以聊天吗?
    • @PHeiberg 先生,我刚刚编写了单击添加按钮时受影响的显示行数,但是如果数据库中已经存在 ID,你能帮我在 msgbox 上显示吗?
    【解决方案3】:

    基于@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
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-23
        • 1970-01-01
        • 2013-06-04
        • 2020-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多