2012-11-16 261 views
0

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

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(); 

我想知道是否有这样做的更有效的方式。注意我不必打开和关闭连接。想知道如果它在我的例子中有所作为。 就更高效而言,我正在寻找最佳代码实践,以满足我上面的要求。

+0

我编辑了你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

+0

“更高效”如何?你应该把'SqlConnection'和'SqlDataAdapter'放到''using''块中,但除此之外你认为“更高效”是什么意思? –

+0

定义高效?代码行?速度?我认为你的代码非常有效。但那真的取决于你自己的要求。代码显然可以稍微清理一些,使用'using'语句,但除此之外它没有问题。 – pyrocumulus

回答

0

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

不,但DataAdapter是隐含的。

MSDN

如果填充被称为前的IDbConnection是封闭的,它打开 检索数据,然后关闭。如果在调用填充 之前连接已打开,则它保持打开状态。

但是请注意,当您使用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

+0

您好蒂姆,你能帮我下面的问题http://stackoverflow.com/questions/13587474/asp-net-dropdownlist-getting-selectedvalue –