类的一个实例不能同时执行两个函数

时间:2014-12-15 15:49:18

标签: c# asp.net

我正在研究ASP.NET Web应用程序。我正在使它成为MVC,我对控制器类有问题。当我想用我的SQL数据库中的元素填充下拉列表时,类正在工作但只有一个类的实例只有一个下拉列表。当我使用一个类来填充2个或更多下拉列表时,它不起作用,VS不会引发任何错误。控制器类可以工作,它可以填充下拉列表,但只有一个下拉列表在加载页面时。所以要工作,我必须为每个下拉列表创建一个控制器类的实例。请有人向我解释为什么不起作用......

这是我的DbBroker:

public DataTable VratiKategorije()
        {
            DataTable kategorije = new DataTable();
            using (cn)
            {
                try
                {
                    SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM KategorijaLeka", cn);
                    adapter.Fill(kategorije);
                }
                catch (Exception err)
                {
                    //
                }

            }
            return kategorije;
        }

这是我使用DbBroker的Controler类:

public void VratiKategorije(DropDownList ddlKategorije){   
            try
            {
                ddlKategorije.DataSource = dbB.VratiKategorije();
                ddlKategorije.DataTextField = "Naziv";
                ddlKategorije.DataValueField = "ID_Kategorije";
                ddlKategorije.DataBind();
            }
            catch (Exception err)
            { 
                //Handle the err
            }
            ddlKategorije.Items.Insert(0, new ListItem("", ""));
        }

这是在Load_Page():

    protected void Page_Load(object sender, EventArgs e)
    {


        KontrolerLeka kl = new KontrolerLeka();
        kl.VratiKategorije(kategorijaLeka);
    }

1 个答案:

答案 0 :(得分:0)

我发现了什么问题。好的,所以当你使用带有适配器的using()函数时,没有与数据库的关闭连接,所以当调用相同的函数时,它不能填充另一个下拉列表,因为最后一个下拉列表函数的连接没有关闭。我在DbBroker中使用了这个代码并使用了它并且它有效! " pokreniDBtransakciju()"使用cn(sql连接字符串)并在从数据库获取记录集后,使用" cn.Close()"关闭连接。这解决了所有问题。

DbBroker:

 public DataTable Uzmi()
        {
            DataTable dt;
            dt = new DataTable();
            SqlCommand sc = new SqlCommand();
            try
            {
                sc.CommandText = "SELECT * FROM KategorijaLeka";
                sc.Connection = pokreniDBTransakciju();
                SqlDataReader reader;
                reader = sc.ExecuteReader();

                dt.Load(reader);
                cn.Close();
            }
            catch (SqlException e)
            {
                Console.WriteLine("GRESKA!!!" + e);
                return null;
            }
            return dt;
        }