表中的用户名重复

时间:2016-10-05 01:39:51

标签: c# database

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

python3.exe

1 个答案:

答案 0 :(得分:3)

获取用户输入创建查询以使用此名称对用户进行计数:

Select count(*) from [User] Where UserName=@UserName

首先@UserName,这是使用command.Parameters.AddWithValue("@UserName", tbName.Text)添加到命令的参数。这需要保护您的代码免受Sql Inejction的影响。

如果您有计数查询的结果:如果计数> 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等。还请将您的表重命名为Table1。

另一件事是没有必要在try和catch中关闭你的连接。使用try catch时的正确方法是使用try / catch / finally

try
{
    con.Open();
    // stuff
}
catch
{
    throw;
}
finally
{
    //this will be executed always
    con.Close();
}

另一个要做的事情是在单独的类中进行数据访问。我想这是学校项目,但如果你想成为真正的程序员并希望学习一些东西,你可以检查这个问题是如何编写数据访问类的:checking user name or user email already exists。答案是关于sql连接,但它是一样的。

为了便于阅读,您可以改进的另一件事是不要使用tb启动文本框,在名称末尾指示控件。因为你的眼睛没有立即抓住正确的名字。因此,当您拥有大量控件时,userNameTxt,userNameTb优于tbUserName。