0

//aspxコード

   <asp:DropDownList ID="DropDownList1" runat="server" DataTextField="fullname" DataValueField="username" AutoPostBack="True" Width="125px" Height="22px"></asp:DropDownList>

//コードビハインド

 SqlConnection myConnection = new SqlConnection("Server=xyz;Database=db;Uid=db;Pwd=12345");
 myConnection.Open();         
 SqlDataReader myReaderddl = null;
 SqlCommand myCommandddl = new SqlCommand("SELECT [username], [fullname] FROM [qa_users]", myConnection);
 myReaderddl = myCommandddl.ExecuteReader();
 myReaderddl.Read();
 ddlrep.DataSource = myReaderddl;                    
 ddlrep.DataValueField = "[username]";
 ddlrep.DataTextField = "[fullname]";
 ddlrep.DataBind();
 myReaderddl.Close();
4

4 に答える 4

2

このコードはテストしていませんが、動作するはずです。

using (var myConnection = new SqlConnection("Server=xyz;Database=db;Uid=db;Pwd=12345"))
{
    using (var myCommandddl = new SqlCommand("SELECT [username], [fullname] FROM [qa_users]", myConnection))
    {
        var table = new DataTable();

        using(var myAdapter = new SqlDataAdapter(myCommandddl))
            myAdapter.Fill(table);

        ddlrep.DataSource = table;
        ddlrep.DataValueField = "username";
        ddlrep.DataTextField = "fullname";
        ddlrep.DataBind();
    }
}

注意すべき変更がいくつかあります。

  • USINGステートメントの使用。これには、例外がスローされたかどうかに関係なく、IDisposableオブジェクトでDispose()が自動的に呼び出されるなど、多くの利点があります。私の意見では、オブジェクトがいつどこに配置されているかを示すのに適したビジュアルです。 http://msdn.microsoft.com/en-us/library/yh598w02.aspx
  • SqlDataRaderを直接使用するのではなく、SqlDataAdapterを使用してテーブルに入力します:http://msdn.microsoft.com/en-us/library/879f39d8
于 2012-07-10T13:20:43.107 に答える
0

これは私の古いコードの一部なので、きれいではありません(最近はEFを使用しています)が、次のように試してみてください。

SqlCommand cmd = new SqlCommand("SELECT [username], [fullname] FROM [qa_users]", myConnection);

cmd.Connection.Open();
SqlDataReader data_table = null;
data_table = cmd.ExecuteReader();
ddlrep.DataSource = data_table;
ddlrep.DataValueField = "username";
ddlrep.DataTextField = "fullname";
ddlrep.DataBind();
data_table.Close();
cmd.Connection.Close();
cmd.Connection.Dispose();

動作中のプロジェクトからこれを取り出したので、動作するはずです。

于 2012-07-10T13:24:10.733 に答える
0

DropDownlist は次のようになります。

<asp:DropDownList ID="ddlrep" runat="server" Width="200px" ></asp:DropDownList>

コードビハインド、ページロード、または任意のメソッド

SqlConnection myConnection = new SqlConnection("Server=xyz;Database=db;Uid=db;Pwd=12345");
 myConnection.Open();         
 SqlCommand myCommandddl = new SqlCommand("SELECT username, fullname FROM qa_users", myConnection);
 SqlDataReader myReaderddl = myCommandddl.ExecuteReader();
 if(myReaderddl.HasRows)
 {
 ddlrep.DataSource = myReaderddl;                    
 ddlrep.DataValueField = "username";
 ddlrep.DataTextField = "fullname";
 ddlrep.DataBind();
 }
 myReaderddl.Close();

ページロードで、このブロックの下にコードを置きます

if (!IsPostBack)
        {
        }
于 2012-07-10T12:56:51.670 に答える
0

コードビハインドを次のように更新します。

if (!IsPostBack)
{

   SqlConnection myConnection = new SqlConnection("Server=xyz;Database=db;Uid=db;Pwd=12345");
    try 
    {
       myConnection.Open();         
       SqlDataReader myReaderddl = null;
       SqlCommand myCommandddl = new SqlCommand("SELECT [username], [fullname] FROM [qa_users]", myConnection);
       myReaderddl = myCommandddl.ExecuteReader();
       if (myReaderddl.HasRows)
       {
          ddlrep.DataSource = myReaderddl;                    
          ddlrep.DataValueField = "username";
          ddlrep.DataTextField = "fullname";
          ddlrep.DataBind();
       }
    }
    finally 
    {
       if (myConnection != null)
       {
          myConnection.Close();
       }
    }
}
于 2012-07-10T12:46:29.727 に答える