2

リスト ビューから選択する必要があり、列 1 (または ii) に基づいて SQL Server データベースからアイテムを選択し、それをローカル データテーブルに書き直してテキスト ファイルに処理する作業を行っています。これが私がこれまでに持っているものです:

var con = new SqlCeConnection(ConfigurationManager.ConnectionStrings[Connection.ConnectionStrings.CurrentConnection].ConnectionString);

foreach (ListViewItem item in LSTAsset.SelectedItems)
{
    for (int ii = 0; ii < LSTAsset.SelectedItems.Count; ii++)
    {

        string select = LSTAsset.SelectedItems[ii].Text;

        if (con != null && con.State == ConnectionState.Closed)
        {
            con.Open();
        }
        var cmd = new SqlCeCommand("Select assetname, serial from asset where        assetname like '%" + select + "%'", con);
        SqlCeDataAdapter dataadapt = new SqlCeDataAdapter(cmd);
        //DataTable datatable = new DataTable();

        if (ii == 0)
        {
            dataadapt.Fill(steve.iTable);
        }

        if (ii < 0)
        {
            dataadapt.Update(steve.iTable);
        }
    }
}

今私の問題は、複数のアイテムが選択されている場合、選択されたアイテムが2倍になるようです。2 つのアイテムを選択したとします。コードが 4 回実行され、データテーブルに 4 行が表示されます。なぜコードを2倍にするのですか?テーブルに必要な行の2倍を書き込むため、後で出力ファイルが台無しになります。

4

1 に答える 1

0

不要なループを 2 回行っているようです ( SelectedItems.Count)。

たとえば、内側または外側のループを削除してみてください。

foreach (ListViewItem item in LSTAsset.SelectedItems)

その理由は、次のステートメントが aforではなくループを介して同じことをforeach実行しており、データベースに接続するn時間が * 2 であるnためです。

于 2013-09-15T17:25:53.997 に答える