Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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
C# 表中的用户名重复_C#_Database - Fatal编程技术网

C# 表中的用户名重复

C# 表中的用户名重复,c#,database,C#,Database,这是我用于注册信息的代码,我尝试了多种方法,将两个oleDbCommand添加到一起,但都不起作用,有没有办法在TryCatch代码中找到tbname.Text中的重复用户名?因此它不会插入数据库并显示错误消息 { { connect.Open(); OleDbCommand command = new OleDbCommand(); command.Conn

这是我用于注册信息的代码,我尝试了多种方法,将两个oleDbCommand添加到一起,但都不起作用,有没有办法在TryCatch代码中找到tbname.Text中的重复用户名?因此它不会插入数据库并显示错误消息

        {

            {
                connect.Open();
                OleDbCommand command = new OleDbCommand();
                command.Connection = connect;
                command.CommandText = "select * from Table1 where Username ='" + tbName.Text + "'";

                OleDbDataReader reader = command.ExecuteReader();
                int count = 0;
                while (reader.Read())
                {
                    count = count + 1;
                    //count++;
                }
                if (count == 0)
                {
                    if (tbName.Text != "Name" && tbPass.Text != "Password")
                    {
                        if (tbEmail.Text != "Email" && tbMobile.Text != "Number")
                        {
                            if (tbFirstName.Text != "" && tbLastName.Text != "")
                            {
                                const int MIN_LENGTH = 8;

                                string password = tbPass.Text;

                                if (password.Length >= MIN_LENGTH && upperCase(password) >= 1)
                                {
                                    r2.Text = "";
                                    r2.ForeColor = Color.Red;
                                }
                                else
                                {
                                    r2.Text = "*Password Is Bad*";
                                    r2.ForeColor = Color.Red;
                                }
                                if (RegularExpression.checkForEmail(tbEmail.Text.ToString()))
                                {
                                    r3.Text = "";
                                }
                                else
                                {
                                    r3.Text = "Invalid email ! Email Contains a @ , .Com  ";
                                    r3.ForeColor = Color.Red;
                                }
                                if (r2.Text == "" && r3.Text == "")
                                { goto na; }
                                else { goto ne; }
                            }
                            else { goto ne; }
                        }
                        else { goto ne; }
                    }
                    else { goto ne; ; }
                ne:
                    if (tbName.Text == "Username")
                    { r1.Text = "*USERNAME REQUIRED*"; r1.ForeColor = Color.Red; }
                    if (tbPass.Text == "Password")
                    { r2.Text = "*PASSWORD REQUIRED*"; r2.ForeColor = Color.Red; }
                    if (tbEmail.Text == "Email")
                    { r3.Text = "*EMAIL REQUIRED*"; r3.ForeColor = Color.Red; }
                    if (tbMobile.Text == "Number")
                    { r4.Text = "*MOBILE NUMBER REQUIRED*"; r4.ForeColor = Color.Red; }
                    if (tbFirstName.Text == "")
                    { label3.Text = "*FIRST NAME REQUIRED*"; r4.ForeColor = Color.Red; }
                    else { label3.Text = ""; }
                    if (tbLastName.Text == "")
                    { label4.Text = "*LAST NAME REQUIRED*"; r4.ForeColor = Color.Red; }
                    else { label4.Text = ""; }
                    MessageBox.Show("Please fill up all the required information correctly before proceeding");
                    return;
                na:

                    try
                    {
                        connect.Open();
                        OleDbCommand command1 = new OleDbCommand();
                        command1.Connection = connect;
                        command1.CommandText = "insert into Table1([Username], [Password], [Email], [Number], [FirstName], [LastName]) values('" + tbName.Text + "','" + tbPass.Text + "','" + tbEmail.Text + "','" + tbMobile.Text + "','" + tbFirstName.Text + "','" + tbLastName.Text + "')";


                        command1.ExecuteNonQuery();
                        MessageBox.Show("Data Saved");

                        MessageBox.Show("Successfully registered, Please log in");
                        regPage log = new regPage();
                        this.Hide();
                        log.ShowDialog();
                        this.Close();
                        connect.Close();
                    }
                    catch (Exception ex)
                    {
                        // MessageBox.Show("Error " + ex);
                        connect.Close();
                    }


                }
                //   if (count > 1)
                //   {
                //     MessageBox.Show("Duplicate username and password");
                //   }
                else
                {
                    //  MessageBox.Show("Username and password is incorrect");
                    MessageBox.Show("Duplicate Name , Please Use Other Username");

                    regPage log = new regPage();
                    this.Hide();
                    log.ShowDialog();
                    this.Close();
                    connect.Close();
                }


                connect.Close();



            }
        }

获取用户输入创建查询以统计具有此名称的用户:

Select count(*) from [User] Where UserName=@UserName
首先是
@UserName
,这是一个参数,它通过
command.Parameters.AddWithValue(“@UserName”,tbName.Text)
添加到命令中。这是保护代码不受攻击的必要条件

当您得到count查询的结果时:如果count>0=>显示错误消息并保留该方法,如果count==0,则继续执行插入查询

注意:

OleDbCommand和OdbCommand不支持命名参数,并使用?而不是占位符,因此参数的顺序很重要。但是,为了便于阅读,您可以为其参数命名,而不是使用?。

所以第二个命令中的参数应该正确,才能正常工作

     connect.Open();
     OleDbCommand command = new OleDbCommand();
     command.Connection = connect;

     command.CommandText = "insert into Table1([Username], [Password], [Email], [Number], [FirstName], [LastName]) values(@Param1,@Param2,'" + tbEmail.Text + "','" + tbMobile.Text + "','" + tbFirstName.Text + "','" + tbLastName.Text + "')";
     command.ExecuteNonQuery();

     command.Paramaters.AddWithValue(@Param1, yourValue);
     command.Paramaters.AddWithValue(@Param2, yourValue);
     and so on for other your parameters but with correct order
您可以使用其他名称,而不是@Param1等等。另外,请将您的表重命名为“表1”

另一件事是没有必要在尝试和捕捉中关闭您的连接。使用try-catch的正确方法是使用try/catch/finally

try
{
    con.Open();
    // stuff
}
catch
{
    throw;
}
finally
{
    //this will be executed always
    con.Close();
}
另一个需要做的高级工作是在单独的类中进行数据访问。我想这是一个学校项目,但如果你想成为一名真正的程序员并想学习一些东西,你可以在这个问题中检查data access类是如何编写的:。答案是关于sql连接,但它是相同的


为了提高可读性,您可以改进的另一件事是不要以tb开头文本框,在名称的末尾指示控件。因为你的眼睛不会立刻看到正确的名字。所以当你有很多控件时,userNameTb比tbUserName好

获取用户输入创建一个查询以统计具有此名称的用户:

Select count(*) from [User] Where UserName=@UserName
首先是
@UserName
,这是一个参数,它通过
command.Parameters.AddWithValue(“@UserName”,tbName.Text)
添加到命令中。这是保护代码不受攻击的必要条件

当您得到count查询的结果时:如果count>0=>显示错误消息并保留该方法,如果count==0,则继续执行插入查询

注意:

OleDbCommand和OdbCommand不支持命名参数,并使用?而不是占位符,因此参数的顺序很重要。但是,为了便于阅读,您可以为其参数命名,而不是使用?。

所以第二个命令中的参数应该正确,才能正常工作

     connect.Open();
     OleDbCommand command = new OleDbCommand();
     command.Connection = connect;

     command.CommandText = "insert into Table1([Username], [Password], [Email], [Number], [FirstName], [LastName]) values(@Param1,@Param2,'" + tbEmail.Text + "','" + tbMobile.Text + "','" + tbFirstName.Text + "','" + tbLastName.Text + "')";
     command.ExecuteNonQuery();

     command.Paramaters.AddWithValue(@Param1, yourValue);
     command.Paramaters.AddWithValue(@Param2, yourValue);
     and so on for other your parameters but with correct order
您可以使用其他名称,而不是@Param1等等。另外,请将您的表重命名为“表1”

另一件事是没有必要在尝试和捕捉中关闭您的连接。使用try-catch的正确方法是使用try/catch/finally

try
{
    con.Open();
    // stuff
}
catch
{
    throw;
}
finally
{
    //this will be executed always
    con.Close();
}
另一个需要做的高级工作是在单独的类中进行数据访问。我想这是一个学校项目,但如果你想成为一名真正的程序员并想学习一些东西,你可以在这个问题中检查data access类是如何编写的:。答案是关于sql连接,但它是相同的



为了提高可读性,您可以改进的另一件事是不要以tb开头文本框,在名称的末尾指示控件。因为你的眼睛不会立刻看到正确的名字。所以当你有很多控件时,userNameTb比tbUserName好

啊!sql注入漏洞。它烧了我们!只是用老派的方法@JoelCoehoorn@TeronKee试着理解我写的内容,如果有不清楚的地方,作为一个问题。如果计数大于0,你应该显示错误消息。计数等于1表示已存在具有此名称的用户。你没有解决你的其他问题,请不要使用goto,它会使你的代码更不可读,如果嵌套的也不好。如果你从我详细解释的所有问题中清除代码,你会发现问题非常简单。嘎!sql注入漏洞。它烧了我们!只是用老派的方法@JoelCoehoorn@TeronKee试着理解我写的内容,如果有不清楚的地方,作为一个问题。如果计数大于0,你应该显示错误消息。计数等于1表示已存在具有此名称的用户。你没有解决你的其他问题,请不要使用goto,它会使你的代码更不可读,如果嵌套的也不好。如果你从我详细解释的所有问题中清除代码,你会发现问题非常简单。我会在尝试另一种方法时更改代码。你能看到它有什么问题吗?它显示重复的用户名,它不会进入计数==1@mybirthname@TeronKee我在你的问题中写了评论。了解什么是调试,并正确使用它来查看发生了什么。因为我像注册信息一样保存在数据库中,我不能同时使用这两个连接,而且我不太理解您的格式,因为我在@MyBirthName中还是新手有两个OleDbConnection对象没有问题,不要使用全局OleDbConnection。有一种东西叫做连接池。就像我在评论中解释的那样,你没有检查count==0,你检查的是count==1,这是错误的。好吧,关于重复的用户名现在可以工作了,我可以用上面更改的代码问一下,为什么在它显示重复的用户名并且我更改了它之后,再次按下按钮,它将不再显示任何内容或工作@mybirthname谢谢!对不起,我对这一点很陌生,我正在学习我会在尝试另一种方法时更改代码,你能看到它有什么问题吗?它显示重复的用户名,它不会进入计数==1@mybirthname@TeronKee我在你的问题中写了评论。了解什么是调试并使用它