1

C#でSQLデータリーダーから読み取り、列の値をドロップダウンリストに渡します。読み取られている列は2つあります。IsDbNullを使用して、null値を処理できます。ただし、現在コードを記述しているので、dr.GetString(0)がnullの場合、値はまったく渡されませんが、dr.GetString(1)(またはどちらも)のみがnullである限り、すべての値は渡され、null値は無視されます。データリーダーが読んでいる間、私が持っているものは次のとおりです。

while (dr.Read())
{
     if (!dr.IsDBNull(0))
     {
          machineName.Items.Add(dr.GetString(0).ToString());
     }
     else if (!dr.IsDBNull(1))
     {
          machineName.Items.Add(dr.GetString(1).ToString());
     }
 }

ドロップダウンリストに、データリーダーが返す値に関係なく、ドロップダウンリストに値を入力する必要があります。コードを整理するために、usingステートメントとtry/catchステートメントを削除しました。みんな、ありがとう。

4

1 に答える 1

6

リーダーで null を処理する私の推奨方法は、名前付き列を使用してから Convert.ToString(object) を使用することです。

したがって、次のようになります。

while (dr.Read())
{
     string firstItem = Convert.ToString(dr["FIRST_ITEM"]);
     if(!string.IsNullOrEmpty(firstItem))
     {
        machineName.Items.Add(firstItem);
     }
     ... etc.
}

しかし、あなたの質問を理解しているかどうかはわかりません。
あなたは言う

ただし、コードを今書いているので、dr.GetString(0) が null の場合、値はまったく渡されませんが、dr.GetString(1) のみ (またはどちらでもない) が null である限り、すべての値が渡され、null 値は無視されます。

if/else if を使用しているように聞こえますが、コードには 2 つの if ステートメントが示されています。

編集:

更新された質問に適切に対処するために、私の解決策は、ListItems の一般的なリストを作成し、各列をそのリストに追加することです。次に、そのリストをドロップダウンにバインドします。

List<ListItem> items = new List<ListItem>();

while(dr.Read())
{
    string firstItem = Convert.ToString(dr["FIRST_ITEM"]);
    if(!string.IsNullOrEmpty(firstItem))
    {
        ListItem thisItem = new ListItem(firstItem, firstItem);
        items.Add(thisItem);
    }
}

 machineName.Items = items;

このように、データがない場合、項目は null になります。1 つの行に 1 つの列があり、次の行にもう 1 つの列がある場合は、それらが適切に追加されます。ただし、else を削除しても、コードは同じように機能するはずです。

于 2009-12-10T18:31:46.950 に答える