我有一个List<String>
名为record
与可能的最大Count
的102.我需要拉50的元素,并将它们添加为查询参数。但是,所有50可能不存在,如果不是,那么我需要将该参数添加为DBNull.Value
。下面的工作,但是有没有比检查每次索引是否存在更好的方法?一遍又一遍检查列表以查看索引是否存在?
List<String> record = new List<String>(myRecord.ToString().Split(new string[] { "^" }, StringSplitOptions.None));
cmd.CommandText = "INSERT INTO myTable ([Field1], [Field3], [Field7], [Field9]"
+ ") VALUES ("
+ "@p1, @p2, @p3, @p4)"
if (record.ElementAtOrDefault(1) != null)
{
cmd.Parameters.AddWithValue("@p1", record[1]);
}
else
{
cmd.Parameters.AddWithValue("@p1", DBNull.Value);
}
if (record.ElementAtOrDefault(3) != null)
{
cmd.Parameters.AddWithValue("@p2", record[3]);
}
else
{
cmd.Parameters.AddWithValue("@p2", DBNull.Value);
}
if (record.ElementAtOrDefault(7) != null)
{
cmd.Parameters.AddWithValue("@p3", record[7);
}
else
{
cmd.Parameters.AddWithValue("@p3", DBNull.Value);
}
if (record.ElementAtOrDefault(9) != null)
{
cmd.Parameters.AddWithValue("@p4", record[9]);
}
else
{
cmd.Parameters.AddWithValue("@p4", DBNull.Value);
}
....
....repeat this for @p5 thru @p50
....
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
工作方案如下:
var indexes = new List<int> { 1, 2, 4, 5, 10, 19, 20, 21, 22, 23, 24, 25, 26, 27, 32, 33, 35, 36, 38, 39, 44, 45, 46, 49, 51, 52, 53, 54, 55, 56, 57, 58, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 79, 80, 81, 82, 83 };
cmd.CommandText = "INSERT INTO myTable ([Field1], [Field3], [Field7], [Field9]"
+ ") VALUES ("
+ "@p1, @p2, @p3, @p4)"
List<String> record = new List<String>(myRecord.ToString().Split(new string[] { "^" }, StringSplitOptions.None));
var records = record.Where((item, index) => indexes.Contains(index)).ToList();
for (int i = 0; i < 5; i++)
{
string paramName = "@p" + (i);
if (i <= records.Count-1) //index starts with a 0
{
cmd.Parameters.AddWithValue(paramName, (object)records[(i)] ?? DBNull.Value);
}
else
{
cmd.Parameters.AddWithValue(paramName, DBNull.Value);
}
}
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
如何循环? –
我会循环它,但'记录[计数]'和参数名称并不总是相同的,我不需要检查列表中的所有项目。 –
然后将索引和参数名称之间的映射存储在['Dictionary'](http://msdn.microsoft.com/en-us/library/xfhwa508%28v=vs.110%29.aspx)中。 –