如何知道c#中特定sql表上是否存在名称?

时间:2014-06-08 23:22:17

标签: c# asp.net sql-server

我有下表:

用户:user_userName,user_userEmail,user_password。

我想要的是在点击c#上的按钮后知道用户名是否存在(如果是这样,告诉用户创建一个新用户名,否则他们将在用户的桌子上)。 / p>

4 个答案:

答案 0 :(得分:4)

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
    }
}

答案 1 :(得分:2)

你的方法有一点缺陷,因为你想检查第一个用户帐户是否存在,如果它没有,那么告诉用户创建一个。

想象一下,当UserA尝试创建用户时,如果其他用户进入并创建了UserA将要创建的相同用户名(麻烦),UserA会检查UserName不存在的情况。

我建议您以一种方式设计应用程序,让您选择用户名或获取用户尝试创建的用户名并进行检查并立即创建,而不是等待用户创建它已检查存在等。

你可以为此创建一个存储过程,就像这样......

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

答案 2 :(得分:1)

使用LINQ,如下所示:

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

答案 3 :(得分:1)

使用LINQ:

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

非常易读和高效。