我正在处理需要从列表视图中进行选择的内容,然后根据第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);
}
}
}
现在我的问题是,当选择多个项目时,它似乎会使所选项目加倍。假设您选择了两个项目,它现在通过代码运行4次,并在数据表中为您提供4行。为什么它会使代码翻倍?它稍后会破坏输出文件,因为它会在表中写入2x所需的行。
答案 0 :(得分:0)
看起来你不必要两次循环(SelectedItems.Count
)。
尝试删除内部或外部循环,例如:
foreach (ListViewItem item in LSTAsset.SelectedItems)
原因是因为下一个语句通过for
循环而不是foreach
执行相同的操作,您将连接到数据库n
次* 2,其中{ {1}}是所选项目计数。