Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 填充下拉列表_C#_Asp.net_Ado.net - Fatal编程技术网

C# 填充下拉列表

C# 填充下拉列表,c#,asp.net,ado.net,C#,Asp.net,Ado.net,我有以下代码来填充dropdownlist: string strConn = ConfigurationManager.ConnectionStrings["PhoQL"].ConnectionString; using (SqlConnection con = new SqlConnection(strConn)) { DataSet ds = new DataSet(); using (SqlDataAdapter myda = new SqlDataAdapter("SELECT

我有以下代码来填充dropdownlist:

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();
我想知道是否有更有效的方法。请注意,我不必打开和关闭连接。在我的例子中,我想知道这是否会有所不同。 在更有效的方面,我正在寻找最好的代码实践为我以上

请注意,我不必打开和关闭连接

不,但是
DataAdapter
会隐式执行此操作

:

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

但也要注意,在使用(默认)时,打开和关闭并不是低效的。因为那时,
con.Open
的意思是“等等,我现在需要这个连接”,而
con.Close
的意思是“好的,你现在可以在其他地方重新使用它,我完成了”

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

处理/关闭连接(任何
IDisposable
)的最佳方法是使用:


(SeNoTo:我用“打火机”<代码> DataTabe<代码> < /p> < p>替换了你的代码>数据集< /> >。如果你反复这样做,你应该考虑缓存数据:


这样,即使有10000个用户,您也只需点击数据库一次。

我已经编辑了您的标题。请看,“,其中的共识是“不,他们不应该”。“更有效”如何?您应该使用
块将
SqlConnection
SqlDataAdapter
放入
中,但除此之外,“更高效”是什么意思?定义高效?代码行?速度依我拙见,你的代码相当有效。但这实际上取决于你自己的需求。显然,使用
using
语句,代码可能会更干净一些,但除此之外,它很好。@Cloud-感谢您的回复。我现在正在使用它。让我知道它是否可以改进。谢谢这应该是在代码审查真的。你好,蒂姆,你能帮我做以下事情吗
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();
}