Asp.net 已经有一个打开的DataReader与此命令关联,必须先关闭该命令
它一直给我 已存在与此命令关联的打开的DataReader,必须先关闭该命令 我的数据库代码到底出了什么问题,有人能帮我吗Asp.net 已经有一个打开的DataReader与此命令关联,必须先关闭该命令,asp.net,Asp.net,它一直给我 已存在与此命令关联的打开的DataReader,必须先关闭该命令 我的数据库代码到底出了什么问题,有人能帮我吗 protected void Button1_Click1(object sender, EventArgs e) { SqlConnection connect = new SqlConnection(ConfigurationManager.ConnectionStrings ["RegistrationConnectionString"].
protected void Button1_Click1(object sender, EventArgs e)
{
SqlConnection connect = new SqlConnection(ConfigurationManager.ConnectionStrings
["RegistrationConnectionString"].ConnectionString);
connect.Open();
string insertQuery = @"IF NOT EXISTS(SELECT 1 FROM Registration where Username=@Uname) insert into Registration (Username,Password,Phone,Email,Country) values (@Uname ,@Password ,@Phone ,@Email ,@Country)";
SqlCommand command = new SqlCommand(insertQuery, connect);
command.Parameters.AddWithValue("@Uname", name.Text);
command.Parameters.AddWithValue("@Phone", Phone.Text);
command.Parameters.AddWithValue("@Email", Email.Text);
command.Parameters.AddWithValue("@Password", Password.Text);
command.Parameters.AddWithValue("@Country", Country.SelectedItem.ToString());
SqlDataReader sdr = command.ExecuteReader();
if (sdr.HasRows)
{
Response.Write("Username already exisited!");
}
else
{
Response.Write("User name is available!");
}
command.ExecuteNonQuery();
connect.Close();
试试这个代码
using (SqlConnection connect = new SqlConnection(ConfigurationManager.ConnectionStrings
["RegistrationConnectionString"].ConnectionString))
{
connect.Open();
string insertQuery = @"IF NOT EXISTS(SELECT 1 FROM Registration where Username=@Uname) insert into Registration (Username,Password,Phone,Email,Country) values (@Uname ,@Password ,@Phone ,@Email ,@Country)";
using (SqlCommand command = new SqlCommand(insertQuery, connect))
{
command.Parameters.AddWithValue("@Uname", name.Text);
command.Parameters.AddWithValue("@Phone", Phone.Text);
command.Parameters.AddWithValue("@Email", Email.Text);
command.Parameters.AddWithValue("@Password", Password.Text);
command.Parameters.AddWithValue("@Country", Country.SelectedItem.ToString());
if (command.ExecuteNonQuery() > 0)
{
Response.Write("User name is available!");
}
else
{
Response.Write("Username already exisited!");
}
}
}
在调用ExecuteReader和调用ExecuteOnQuery时,分别调用了两次SqlCommand。由于您的语句从不将记录返回到客户端属性,因此HasRows将始终为false。最后,建议在实例化一次性对象时始终使用using语句。如果您阅读错误消息,问题似乎很明显。命令上有一个打开的数据读取器,然后在命令上调用
ExecuteNonQuery
。这显然行不通。您只有一条语句,只需要执行一次。为什么不使用while(sdr.Read)?