我有一個註冊形式爲我的新用戶:已經有一個開放的DataReader
然後,它也有一個按鈕:
當按鈕Register
點擊,我設置命令來檢查電子郵件是否已經存在。
它會檢查值並能夠在調試過程中找到值。
但是時出現錯誤,說
已經有一個用此命令,必須先關閉相關聯的打開的DataReader。
這裏是我的ASP.NET標記:
<div id="success" runat="server" class="alert alert-success" visible="false">
Account registration success!
<br />
Account sent for approval. Thank you.
</div>
<div id="emailavail" runat="server" class="alert alert-success" visible="false">
Email is Available.
</div>
<div id="error" runat="server" class="alert alert-danger" visible="false">
Email is already in use
<br />
Please choose another email/Login if already registered
</div>
<div class="form-group">
<br />
<label class="control-label col-lg-4">User Type</label>
<div class="col-lg-8">
<asp:Label ID="UserType" runat="server" class="form-control" text="Customer" required />
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-4">Email</label>
<div class="col-lg-8">
<asp:TextBox ID="txtEmail" runat="server" class="form-control" type="email"
MaxLength="80" required />
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-4">Password</label>
<div class="col-lg-8">
<asp:TextBox ID="txtPassword" runat="server" class="form-control" TextMode="Password" MaxLength="20" required />
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-4">First Name</label>
<div class="col-lg-8">
<asp:TextBox ID="txtFN" runat="server" class="form-control" MaxLength="80" required />
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-4">Last Name</label>
<div class="col-lg-8">
<asp:TextBox ID="txtLN" runat="server" class="form-control" MaxLength="50" required />
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-4">Company Name</label>
<div class="col-lg-8">
<asp:TextBox ID="txtCName" runat="server" class="form-control" MaxLength="50" required />
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-4">Street</label>
<div class="col-lg-8">
<asp:TextBox ID="txtStreet" runat="server" class="form-control" MaxLength="50" required />
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-4">Municipality</label>
<div class="col-lg-8">
<asp:TextBox ID="txtMunicipality" runat="server" class="form-control" MaxLength="100" required />
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-4">City</label>
<div class="col-lg-8">
<asp:TextBox ID="txtCity" runat="server" class="form-control" MaxLength="50" required />
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-4">Company Phone</label>
<div class="col-lg-8">
<asp:TextBox ID="txtCPhone" runat="server" class="form-control" MaxLength="12" type="number" required />
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-4">Mobile</label>
<div class="col-lg-8">
<asp:TextBox ID="txtMobile" runat="server" class="form-control" MaxLength="12" type="number" required />
</div>
</div>
</div>
<div class="col-lg-10">
<span class="pull-right">
<asp:Button ID="btnCancel" runat="server" class="btn" style="color:White" text="Cancel" PostBackUrl="~/Default.aspx" BackColor="Black" />
<asp:Button ID="btnRegister" runat="server" class="btn btn-success"
Text="Register" style="color:White" onclick="btnRegister_Click" />
</span>
</div>
這裏是後臺代碼:
protected void btnRegister_Click(object sender, EventArgs e)
{
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "SELECT Email FROM Registration WHERE [email protected]";
cmd.Parameters.AddWithValue("@Email", txtEmail.Text);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
error.Visible = true;
emailavail.Visible = false;
success.Visible = false;
con.Close();
}
else
{
cmd.Connection = con;
cmd.CommandText = "INSERT INTO Users VALUES (@TypeID, @Email, @Password, " +
"@FirstName, @LastName, @CompanyName, @Street, @Municipality, @City, @CompanyPhone, @Mobile, " +
"@Status, @DateAdded, @DateModified)";
cmd.Parameters.AddWithValue("@TypeID", "2");
cmd.Parameters.AddWithValue("@Email", txtEmail.Text);
cmd.Parameters.AddWithValue("@Password", Helper.CreateSHAHash(txtPassword.Text));
cmd.Parameters.AddWithValue("@FirstName", txtFN.Text);
cmd.Parameters.AddWithValue("@LastName", txtLN.Text);
cmd.Parameters.AddWithValue("@CompanyName", txtCName.Text);
cmd.Parameters.AddWithValue("@Street", txtStreet.Text);
cmd.Parameters.AddWithValue("@Municipality", txtMunicipality.Text);
cmd.Parameters.AddWithValue("@City", txtCity.Text);
cmd.Parameters.AddWithValue("@CompanyPhone", txtCPhone.Text);
cmd.Parameters.AddWithValue("@Mobile", txtMobile.Text);
cmd.Parameters.AddWithValue("@Status", "Pending");
cmd.Parameters.AddWithValue("@DateAdded", DateTime.Now);
cmd.Parameters.AddWithValue("@DateModified", DBNull.Value);
}
cmd.ExecuteNonQuery();
con.Close();
}
我曾嘗試:
- 刪除我
selectedindexchanged
爲標籤名稱,因爲它確實再次選擇來自用戶的電子郵件。 - 我試着移動
con.close
,因爲正如我研究過的,它在那裏有一些事情要做。
請幫我忙這個小時。
預先感謝您!
我還是新的C#
你打開閱讀器,但你嘗試發送新的命令。始終關閉第一個連接,併爲INSERT打開一個新連接。 –
或者,使用「IF NOT EXISTS」語法在一個SQL命令中檢查並插入操作。 –
您需要啓用[MultipleActiveResultSets](https://msdn.microsoft.com/en-us/library/cfa084cz(v = vs.110).aspx) – Steve