Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何检查数据库中是否已存在记录_Vb.net - Fatal编程技术网

Vb.net 如何检查数据库中是否已存在记录

Vb.net 如何检查数据库中是否已存在记录,vb.net,Vb.net,我是vb.net新手,我想检测用户输入的用户名是否已经存在于MySQL数据库中,然后它将显示一个错误,即该用户名已经存在于数据库中。 这是我的密码: conn.Open() Dim qadd As String = "INSERT INTO tbl_user (uname, pword, ulvl) VALUES ('" & txt_uname.Text & "' , '" & txt

我是vb.net新手,我想检测用户输入的用户名是否已经存在于MySQL数据库中,然后它将显示一个错误,即该用户名已经存在于数据库中。 这是我的密码:

            conn.Open()
            Dim qadd As String = "INSERT INTO tbl_user (uname, pword, ulvl) VALUES ('" & txt_uname.Text & "' , '" & txt_pword1.Text & "' , '" & txt_pword2.Text & "') ON DUPLICATE KEY UPDATE uname = ' " & txt_uname.Text & " '"
            Dim cmd As New MySqlCommand(qadd, conn)
            Dim data As MySqlDataReader = cmd.ExecuteReader
            MsgBox("User has been added!", MsgBoxStyle.Information)
            txt_uname.Clear()
            txt_pword1.Clear()
            txt_pword2.Clear()
            txt_uname.Focus()
            conn.Close()

这更像是一个MySQL的问题,但接下来是

你的声明:

Dim qadd As String = "INSERT INTO tbl_user 
    (uname, pword, ulvl) 
    VALUES (
        '" & txt_uname.Text & "' , 
        '" & txt_pword1.Text & "' , 
        '" & txt_pword2.Text & "'
          ) 
   ON DUPLICATE KEY UPDATE uname = ' " & txt_uname.Text & " '"
没有告诉我您使用什么键来确定(uname、pword、ulvl)是否会创建重复记录。 此外,我不确定您是否正在尝试添加新记录或更新现有记录。 试图在一个语句中同时完成这两项任务可能很困难

但分解它们更容易

假设已将
uname
定义为唯一键,则我倾向于执行以下操作:

添加记录

  • 根据您的
    uname
    值[txt\u uname.Text]在tbl_用户中查找或计数(*)记录
  • 测试结果,然后
    • a) 其中COUNT(*)=0执行插入语句(不使用重复键)
    • b) 其中COUNT(*)>0抛出错误消息“用户名已存在”
    更改用户名

  • 根据您的
    uname
    值[txt\u uname.Text]在tbl_用户中查找或计数(*)记录
  • 测试结果,然后
    • a) 其中COUNT(*)=0执行更新语句
    • b) 在哪里 计数(*)>0抛出错误消息“用户名已存在”
    您可以将逻辑封装在2个存储过程中,并在需要添加或更新记录时在单个语句中调用它们

    要添加记录,存储过程可能如下所示:

        DELIMITER $$
    
    CREATE
        /*[DEFINER = { user | CURRENT_USER }]*/
        PROCEDURE `sp_addnewuser`(in_uname VARCHAR(100), in_password VARCHAR(100))
        /*LANGUAGE SQL
        | [NOT] DETERMINISTIC
        | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
        | SQL SECURITY { DEFINER | INVOKER }
        | COMMENT 'string'*/
        BEGIN
    
    /*
    Create a variable to capture a count of username
    And to test if an insert was successful
    */
    SET @user_count = 0;
    
    SELECT COUNT(*) INTO @user_count FROM `tbl_user` WHERE `uname` = in_uname;
    
    IF @user_count = 0 THEN 
       INSERT INTO `tbl_user` (uname, pword) VALUES (in_uname, in_password) ;
       -- 
       -- Check that we have a new record for this uname value
       SELECT COUNT(*) INTO @user_count FROM `tbl_user` WHERE `uname` = in_uname;
       IF @user_count = 0 THEN
        SELECT "ERROR" AS `result`, "Failed to insert a new reord" AS `message`;
       ELSE
        SELECT "OK" AS `result`, "" AS `message`;
       END IF;
       
       
    ELSE
       SELECT "EXISTING" AS `result`, "This username already exists" AS `message`;
     
    END IF;
        END$$
    
    DELIMITER ;
    
    对MySQL数据库运行上述语句,并按如下方式调用它:

    调用sp_addnewuser(txt_uname.Text,txt_pword1.Text)
    例如:

    CALL sp_addnewuser("user0", "user0");
    -- ------  ---------
    -- result  message  
    -- ------  ---------
    -- OK   
        
        
    CALL sp_addnewuser("user0", "user0");        
    -- result    message                       
    -- --------  ------------------------------
    -- EXISTING  This username already exists  
    

    应将结果写入数据表并进行查询。

    如果要从数据库获取数据,则使用查询。您希望从数据库中获取哪些数据?这就是您的查询应该得到的结果。然后可以在VB代码中使用该结果。首先考虑逻辑,然后编写代码来实现该逻辑。我是否要使用if-else语句来实现该逻辑?您要实现什么逻辑?
    If…Else
    用于什么?这两个东西兼容吗?我正在尝试实现,如果我输入的用户名已经存在于我的数据库中,那么它将显示一个错误,即该用户名已经被使用。我决定删除重复的密钥更新,因为我认为这会使我的工作复杂化。我要在这里使用if-else语句吗?因为我的代码的主要功能是显示一条错误消息,指示用户输入的用户名已经存在于数据库中。否则,如果用户名在数据库中不存在,那么它将是您需要执行计数(uname)并对该结果执行操作的另一种方式。您熟悉存储过程吗?我不熟悉存储过程。你能给我看一个执行计数(uname)的示例代码吗?因为我认为这可以通过执行if-else或try-catch来完成。请看一下对我以前回答的编辑。我在这一部分有一个错误:SET@user\u count=0。。它表示不再支持Set赋值语句。顺便说一下,我正在使用VisualStudio2005