2016-04-24 123 views
2

我想找到大量的时间如何检查值存在,我无法找到它,我需要检查两次:在招牌如何检查是否值已经存在

  1. 高达
  2. 日志在

这里是我的代码块:

SqlConnection c = new SqlConnection(str); 
     SqlCommand cmdUsername = new SqlCommand("SELECT 1 FROM Users WHERE UserName = @userName;", c); 
     cmdUsername.Parameters.AddWithValue("userName", userName); 
     cmdUsername.CommandType = System.Data.CommandType.Text; 
     SqlCommand cmdEmail = new SqlCommand("SELECT 1 FROM Users WHERE Email = @email;", c); 
     cmdUsername.Parameters.AddWithValue("email", email); 

     c.Open(); 
     nameExists = (int)cmdUsername.ExecuteScalar(); 
     emailExists = (int)cmdEmail.ExecuteScalar(); 
     c.Close(); 

当我输入一个电子邮件它标志着行

emailExists = (int)cmdEmail.ExecuteScalar(); 

和日志中的所有的就可以了。

请帮帮我!谢谢你们。

+0

它标志着怎么行?有编译器错误?向我们展示'nameExists'和'emailExists'的定义。 –

+0

这里是defenition: 'int nameExists,emailExists;' 错误是这样的: **对象引用未设置为对象的实例** – D4NieLDev

+0

什么是str?连接字符串? –

回答

1

假设你要防止重复的用户名或电子邮件,你必须做到以下几点。 1.将ID列设置为INT,并将其设置为来自列属性的标识列。 2.将您的电子邮件或用户名设置为主键,以防止重复发送电子邮件或用户名,最佳做法是将电子邮件列设置为主键,其中有很多情况下用户具有相同的名称但具有唯一的名称电子邮件。 FYI

希望有帮助!

并检查用户名或电子邮件是否已经在这里存在你如何做到这一点!

SqlCommand check_User_Name = new SqlCommand("SELECT COUNT(*) FROM [Table] WHERE ([user] = @user || [email] = @email)" , c); 
check_User_Name.Parameters.AddWithValue("@user", txtBox_UserName.Text); 
check_User_Name.Parameters.AddWithValue("@email", txtBox_Email.Text); 
int UserExist = (int)check_User_Name.ExecuteScalar(); 

if(UserExist > 0) 
{ 
    //Username exist 
} 
else 
{ 
    //Username doesn't exist. 
} 
+0

如何在输入已存在的值时打印错误消息?例如,用户名john已经存在,现在一个新人想用john这个名字注册,我想打印一个错误信息。 – D4NieLDev

+0

你需要设置一个错误处理程序,你应该问一个新的问题。目前如果答案对你有帮助,请接受它作为帮助周围其他人的答案。 –

+0

我认为它会有所帮助,但我更喜欢只有一个主键 – D4NieLDev

-1

试试这个 -

string myConnection=str;//this is your connection string 
string userName=""; 
string email=""; 
string parameteruserName = "";//your parameter should goes here 
string parameterEmail = "";//your parameter should goes here 
try 
{ 
    SqlDataReader myReader = null; 
    SqlCommand myCommand = new SqlCommand(SELECT COUNT(*) as count FROM Users WHERE UserName =" +parameteruserName+" or Email ="+parameterEmail 
    ) "+ ";", 
              myConnection); 
    myReader = myCommand.ExecuteReader(); 
    while(myReader.Read()) 
    { 
     userName= myReader["count"].ToString(); 

    } 
myReader.close(); 
myConnection.Close(); 
} 
catch (Exception e) 
{ 
    Console.WriteLine(e.ToString()); 
} 


if(Convert.ToInt32(userName)>0){ 
//your user name is exists 
} 
+0

我尝试一下,当我输入一个现有的电子邮件时,我没有收到任何错误。 如何知道用户名或电子邮件是否存在? – D4NieLDev

+0

我无法调用myReader.close()方法,因为它不存在于当前上下文中。 – D4NieLDev

+0

如果您从记录中得不到任何信息,则电子邮件或usert名称为空字符串,这意味着电子邮件或用户名不存在。 –

0

使用你的代码,只是优化了一下。

  • 只需一个电话数据库
  • 始终关闭连接,即使没有找到时出现
  • 返回false一个异常或缺异常发生,真正otherwis

您还可以添加一个检查如果这是一个登录检查,则输入密码。

public bool ValidData(string username, string email, string connectionString) 
{ 
    var c = new SqlConnection(connectionString); 
    var cmdUsername = new SqlCommand("SELECT COUNT(*) FROM Users WHERE UserName = @userName AND email = @email;", c); 
    cmdUsername.Parameters.AddWithValue("userName", username); 
    cmdUsername.CommandType = System.Data.CommandType.Text; 
    cmdUsername.Parameters.AddWithValue("email", email); 

    c.Open(); 
    try 
    { 
     return (int) cmdUsername.ExecuteScalar() > 0; 
    } 
    catch (Exception ex) 
    { 
     //log exception 

     return false; 
    } 
    finally 
    { 
     c.Close(); 
    } 
} 

如果你只需要用户名或电子邮件的变化:

var cmdUsername = new SqlCommand("SELECT COUNT(*) FROM Users WHERE UserName = @userName AND email = @email;", c); 

到:

var cmdUsername = new SqlCommand("SELECT COUNT(*) FROM Users WHERE UserName = @userName OR email = @email;", c);