如何在c#中知道一个名称是否存在于一个特定的sql表中

本文关键字:存在 是否 于一个 表中 sql 一个 | 更新日期: 2023-09-27 18:07:25

我有以下表格:

users: user_userName, user_userEmail, user_password.

我想知道的是用户名是否存在(如果存在,告诉用户创建一个新的,否则他们会在用户的表)后点击按钮c#

如何在c#中知道一个名称是否存在于一个特定的sql表中

using(SqlCommand cmd = new SqlCommand("IF EXISTS (SELECT TOP 1 1 FROM users WHERE user_userName = @userName) SELECT 1 ELSE SELECT 0", connection))
{
    cmd.Paramaters.AddWithValue("userName", "TestUserName");
    object result = cmd.ExecuteScalar();
    if(DBNull.Value.Equals(result) || result == null || (int)result == 0)
    {
        // user does not exist
    }
}

您的方法有一个小缺陷,因为您想首先检查用户帐户是否存在,如果不存在则告诉用户创建一个。

想象这样一个场景,UserA检查了一个不存在的UserName,然后当UserA试图创建一个用户时,如果另一个用户进来并创建了与UserA将要创建的相同的用户名该怎么办?

我建议设计你的应用程序,让你选择用户名或获取用户试图创建的用户名,并检查它,并立即创建它,而不是等待用户创建它一旦它被检查存在等。

您可以为此创建一个存储过程,如下所示.....

CREATE PROCEDURE dbo.Create_UserName
@UserName   VARCHAR(100),
@Email      VARCHAR(100),
@Password   VARCHAR(100),
@Message    VARCHAR(1000) OUTPUT
AS
BEGIN
 SET NOCOUNT ON;
   IF EXISTS(SELECT 1 FROM Users WHERE user_userName = @UserName)
     BEGIN
       SET @Message = 'User Name already Exist Please try a different User Name';
     END 
  ELSE 
    BEGIN
      INSERT INTO Users (user_userName, user_userEmail, user_password)
       VALUES (@UserName,@Email,@Password);
      SET @Message = 'User Name is Created Happy Days :)';
    END   
END

对于LINQ,它是这样的:

User user = list.FirstOrDefault(x => x.UserName == "John");
if (user != null)
{
    // Use user
}
else{
   // create a new one
}

Using LINQ:

if (db.users.Any(r => r.user_userName == login.Text))
    // todo: create user
else
    // use this user