填充下拉列表

时间:2012-11-16 14:48:27

标签: c# asp.net ado.net

我有以下代码来填充下拉列表:

string strConn = ConfigurationManager.ConnectionStrings["PhoQL"].ConnectionString;
using (SqlConnection con = new SqlConnection(strConn))
{
  DataSet ds = new DataSet();
  using (SqlDataAdapter myda = new SqlDataAdapter("SELECT [Abrv], [State] FROM [States]", con))
  {
    myda.Fill(ds)
    ddlShipState.DataSource = ds;
  }
}
ddlShipState.DataTextField = "State";
ddlShipState.DataValueField = "Abrv";
ddlShipState.DataBind();

我想知道是否有更有效的方法。注意我没有打开和关闭连接。想知道它是否会对我的例子产生影响。 为了提高效率,我正在寻找最佳代码实践。

2 个答案:

答案 0 :(得分:0)

  

注意我没有打开和关闭连接。

不,但DataAdapter隐含了这一点。

MSDN

  

如果在调用Fill之前关闭了IDbConnection,则会打开它   检索数据然后关闭。如果连接在Fill之前打开   被称为,它仍然是开放的。

但是请注意,当您使用Connection-Pooling(默认)时,打开和关闭效率不高。因为con.Open只是意味着“等待,我现在需要这个连接”而con.Close意味着“好的,你现在可以在其他地方重复使用它,我已经完成了。”

因此,您应该在完成连接后立即关闭连接。否则,连接池每次都需要打开新的物理连接,这可能导致异常(最大默认连接数为100)但总是会降低性能。

处理/关闭连接(任何IDisposable)的最佳方式是使用using statement

using(var con = new SqlConnection(ConfigurationManager.ConnectionStrings["PhoQL"].ConnectionString))
using(var cmd = new SqlCommand("SELECT [Abrv], [State] FROM [States]", con))
using(var da = new SqlDataAdapter(cmd))
{
    DataTable tbl = new DataTable();
    da.Fill(tbl);
    ddlShipState.DataSource = tbl;
    ddlShipState.DataTextField = "State";
    ddlShipState.DataValueField = "Abrv";
    ddlShipState.DataBind();
} 

(旁注:我已将DataSet替换为“打火机”DataTable

答案 1 :(得分:0)

如果你反复这样做,你应该考虑缓存数据:

http://msdn.microsoft.com/en-us/library/aa478965.aspx

这样你就可以只打一次数据库......即使有10,000个用户。