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