Vb.net 如何检查数据库中是否已存在记录
我是vb.net新手,我想检测用户输入的用户名是否已经存在于MySQL数据库中,然后它将显示一个错误,即该用户名已经存在于数据库中。 这是我的密码: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
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抛出错误消息“用户名已存在”
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