我正在研究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);
}
答案 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;
}