已经有一个与此命令关联的打开DataReader,必须先关闭它。

时间:2013-05-09 05:11:53

标签: c# winforms

我有一个组合框用于申请号码。在从组合框中选择申请编号时,我们应该获得申请该特定申请的成本中心。这是代码:

        cmd.Connection = con;
        if (con.State != ConnectionState.Open)
        {
            con.Open();
        }
        txtcc.Text = "";
        if (cmbreqno.SelectedValue != null || Convert.ToString(cmbreqno.SelectedValue) != "")
        {
            cmd.Connection = con;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "sp_displaycostcenter";
            cmd.Parameters.AddWithValue("@req_no", cmbreqno.SelectedValue);

            SqlDataReader rdr = cmd.ExecuteReader();


            adp.Fill(dsreqno,"selectedpurchase");
            if (dsreqno.Tables["selectedpurchase"].Rows.Count > 0)
            {
                txtcc.Text = dsreqno.Tables["selectedpurchase"].Rows[0]["req_no"].ToString();
            }
            dsreqno.Tables["selectedpurchase"].Clear();

        }
        cmd.Parameters.Clear();
        //rdr.Close();
        con.Close();

2 个答案:

答案 0 :(得分:0)

试试这个:

    if (con.State != ConnectionState.Open)
    {
        con.Open();
    }
    txtcc.Text = "";
    if (cmbreqno.SelectedValue != null || Convert.ToString(cmbreqno.SelectedValue) != "")
    {
        cmd.Connection = con;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "sp_displaycostcenter";
        cmd.Parameters.AddWithValue("@req_no", cmbreqno.SelectedValue);

        SqlDataReader rdr = cmd.ExecuteReader();
        if (rdr.Read())
        {
         txtcc.Text= rdr[0].ToString();//assuming sp_displaycostcenter returns costcenter.
        }
        rdr.Close();

    }        
    con.Close();

答案 1 :(得分:0)

您可以使用MSDN(http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.aspx)中的标准代码块来读取数据,如下所示,并将变量替换为您自己的变量:

private static DataSet SelectRows(DataSet dataset,
                                  string connectionString,
                                  string queryString) 
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = new SqlCommand( queryString, connection);
        adapter.Fill(dataset);
        return dataset;
    }
}