我正在填写注册表,我必须检查电子邮件是否有效并且已在我的数据库中使用。我想出了一种方法,但是我的代码有错误。如果显示“出了点问题”,并且在尝试使用新的电子邮件地址后,我在DataReader处出错,并且如果我直接使用新的电子邮件地址,则在ExecuteNonQuerry处显示了错误。有困难吗?我验证电子邮件地址的方法可以单独工作。谢谢。
public bool IsValidEmail(string emailadress)
{
try
{
MailAddress m = new MailAddress(emailadress);
return true;
}
catch
{
return false;
}
}
public bool good(string emailadress)
{
SqlCommand cmd = new SqlCommand("SELECT Email FROM Clients", con);
SqlDataReader dr = cmd.ExecuteReader();//error is here
while (dr.Read())
{
if (dr[0].ToString() == textBox6.Text)
{
return false;
}
}
return true;
}
private void button1_Click(object sender, EventArgs e)
{
if (IsValidEmail(textBox6.Text) && good(textBox6.Text))
{
SqlCommand cmd1 = new SqlCommand("insert into Clienti(Name , Prename , Adress , Pass , Email ) values (@name , @prename ,@adress , @pass , @email)", con);
cmd1.Parameters.AddWithValue("name", textBox1.Text);
cmd1.Parameters.AddWithValue("prename", textBox2.Text);
cmd1.Parameters.AddWithValue("adress", textBox3.Text);
cmd1.Parameters.AddWithValue("pass", textBox4.Text);
cmd1.Parameters.AddWithValue("email", textBox6.Text);
cmd1.ExecuteNonQuery();//error is here
cmd1.Dispose();
MessageBox.Show("success");
}
else
MessageBox.Show("something went wrong");
}
答案 0 :(得分:0)
在从good
函数返回值之前,请尝试关闭阅读器。如下所示:
public bool good(string emailadress)
{
SqlCommand cmd = new SqlCommand("SELECT Email FROM Clients", con);
SqlDataReader dr = cmd.ExecuteReader();//error is here
while (dr.Read())
{
if (dr[0].ToString() == textBox6.Text)
{
dr.Close();
return false;
}
}
dr.Close();
return true;
}
答案 1 :(得分:0)
使用SqlDataReader后应将其关闭,否则它将保持连接锁定,并且只有在关闭连接后才能使用该连接。 但是,您不需要SqlDataReader即可发现您是否已经注册了电子邮件地址
curl -d ‘file=@myfile.txt’ -d localhost/submit.php
请记住,像SqlCommand,SqlDataReader这样的一次性对象非常重要,但应在需要它们时立即创建SqlConnection,并立即处置以释放宝贵的资源。
上面带有当场创建的连接的代码为:
public bool good(string emailadress)
{
string query = @"IF EXISTS(SELECT 1 FROM Clients WHERE Email = @email)
SELECT 1 ELSE SELECT 0";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.Add("@email", SqlDbType.NVarChar).Value = emailadress;
int result = (int)cmd.ExecuteScalar();
return (result == 1);
}