このコマンドに関連付けられた開いている DataReader が既に存在し、最初に閉じる必要があります。

プログラミングQA

[ad_1]

以下のコードを実行してエラーが発生すると、このコマンドに関連付けられた開いているデータリーダーが既に存在し、閉じる必要があります。 エラー 助けて

C#
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
public partial class Finaldestination : System.Web.UI.Page
{
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString);
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string strSelect = "SELECT * FROM tblregistration  WHERE UserId = '" + TextBox2.Text + "' ";
        SqlCommand cmdSelect = new SqlCommand(strSelect,con);
        cmdSelect.Parameters.AddWithValue("@UserId", TextBox2.Text);

        cmdSelect.CommandText = strSelect;
        cmdSelect.Connection = con;
        SqlDataReader reader;
        con.Open();
        reader = cmdSelect.ExecuteReader();
        {
            
            if ( reader.HasRows == true)
            {
                con.Close();
                Label1.Text = "Username exists please try other one";
            }
            
            else
            {

                string insert = "insert into tblregistration(Name,UserId,Email,Password,Confirmpassword) values (@Name,@UserId,@Email,@Password,@Confirmpassword) ";
                SqlCommand cmd = new SqlCommand(insert, con);
                cmd.Parameters.AddWithValue("@Name", TextBox1.Text);
                cmd.Parameters.AddWithValue("@UserId", TextBox2.Text);
                cmd.Parameters.AddWithValue("@Email", TextBox3.Text);
                cmd.Parameters.AddWithValue("@Password", TextBox4.Text);
                cmd.Parameters.AddWithValue("@Confirmpassword", TextBox5.Text);
                //con.Open();
                cmd.ExecuteNonQuery();  
                Label1.Text = "data saved";
               
            }
        }

手がかりはエラーメッセージにあります:

there is already an open datareader associated with this command which must be closed.

リーダーを作成し、挿入コマンドに同じ接続を再利用する前にそれを破棄しようとしないでください。 これは許可されていません: http://msdn.microsoft.com/en-us/library/haa3afyz(v=vs.80).aspx[^]
「DataReader オブジェクトの使用が終了したら、常に Close メソッドを呼び出す必要があります。
Command に出力パラメーターまたは戻り値が含まれている場合、それらは DataReader が閉じられるまで使用できません。
DataReader が開いている間、Connection はその DataReader によって排他的に使用されることに注意してください。 元の DataReader が閉じられるまで、別の DataReader の作成を含め、接続のコマンドを実行することはできません。」

だからあなたのelse条件の一番上に、これを追加してください:

C#
reader.Close();

閉じる必要があります SqlDataReader SqlDataReader が開いているときは、接続が使用されているため、その特定の接続に対してコマンドを実行することはできません。

使用する reader.Close(); コードのelseブロックのすぐ内側。

参照 : http://stackoverflow.com/questions/16162732/already-an-open-datareader-associated-with-this-command-which-must-be-closed-fir[^]

[ad_2]

Source link

コメント

タイトルとURLをコピーしました