【发布时间】:2019-02-05 14:13:13
【问题描述】:
我搜索了很多,我可能偶然发现了一些类似的东西,但对我来说仍然是陌生的,因为我是 c# 的新手。
我想从 List
Tline 有点像
public class Tline
{
public string Cd_m { get; set; }
public string cd_d { get; set; }
public string cd_c { get; set; }
...
}
我的问题在这里(用箭头表示)
class ACCS
{
internal void DBwrite(List<Tline> imoprtati)
{
OleDbConnection myAccessConn = null;
string sFld = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string dbName = "EDIM1.mdb";
dbName = Path.Combine(sFld, dbName);
string accessConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", dbName);
string sqlQuery = "INSERT INTO DOTes (`id`,`cd_m`,`cd_d`,`cd_c`,`nume`) values (?,?,?,?,?)";
myAccessConn = new OleDbConnection(accessConn);
int i = 2;
foreach (var insT in imoprtati)
{
using (OleDbCommand cmd = new OleDbCommand(sqlQuery, myAccessConn))
{
cmd.Connection.Open();
cmd.Parameters.AddWithValue("@id", i.ToString());
cmd.Parameters.AddWithValue("@cd_m", "2018");
cmd.Parameters.AddWithValue("@cd_d", "BO");
cmd.Parameters.AddWithValue("@cd_c", "C00128");
// Show current Tline Index ↓↓↓↓↓↓↓
cmd.Parameters.AddWithValue("@nume", (imoprtati.GetEnumerator().Current)); //trying anything
cmd.ExecuteNonQuery();
cmd.Connection.Close();
i++;
}
}
}
}
【问题讨论】:
-
你试过
imoprtati.IndexOf(Current)吗? -
在此使用
for循环可能会更好,因为您需要索引和关联项 -
@vc74 实际上可能不是(至少,如果你是一个书呆子的话)——由于
List<T>的自定义结构迭代器与索引器相比,它可能会更昂贵一些使用for;如果这是一个数组:你绝对正确 -
List不保证顺序。如果您想避免奇怪的事情,您应该考虑将其更改为SortedList -
@MarcGravell 感谢您提到这一点,
for循环可能比foreach慢。我想这会给那些相信“永远不要使用 foreach,它比 for 慢”的 OP 造成更多的混乱。但如果要处理的项目数量很大,我只会考虑这个论点,如果不是这种情况,我会选择可读性而不是微优化。