我有3个阵列。两个是字符串数组,一个是日期/时间。我从用户输入中提取了所有3个。每个数组总是具有相同数量的条目,所以我想要做的是能够一次遍历所有3个字符串。
我在尝试:
List<string> results = new List<string>();
// select
foreach (string line in array1)
{
foreach (string lines in array2)
{
foreach (DateTime date in datearray1)
{
results.Add("select * from table1 d, table2 c where d.specheader = c.specheader and c.true_false = true and d.number = " + lines.ToString() + " and d.date = '" + date.ToShortDateString() + "' and d.specnum like '%" + line.ToString() + "';");
}
}
}
results.ToArray();
foreach (string line in results)
{
MessageBox.Show(line);
}
用户将信息输入3个框,我只是试图根据输入连接sql语句。然而,当我尝试这样做的时候,当我只有2个条目时,它循环了6次。有没有办法同时使用所有3个数组连接一个字符串(所以像数组1的第1项,数组2的第1项,数组3的第1项 - 然后继续创建下一个字符串,数组的第2项1,数组2的第2项,数组3的第2项等)
任何输入都将不胜感激。谢谢!
答案 0 :(得分:1)
由于您的循环是嵌套的,因此您将array2
的每个值与array1
中的每个值相结合(与datearray1
类似。这就是为什么您得到太多结果。< / p>
你的循环会像这样按预期工作(我使用类似的局部变量来避免重新输入results.Add
行,并清楚代码与你的不同):
for (int i = 0; i < array1.Length; i++)
{
string line = array1[i];
string lines = array2[i];
DateTime date = datearray1[i];
results.Add("select * from table1 d, table2 c where d.specheader = c.specheader and c.true_false = true and d.number = " + lines.ToString() + " and d.date = '" + date.ToShortDateString() + "' and d.specnum like '%" + line.ToString() + "';");
}
作为旁注:以这种方式构建数据库查询是无效且非常不安全的(尝试阅读“Sql Injection”以了解原因)。如果您使用存储过程,则会看到更好的结果。
答案 1 :(得分:1)
正如第一位评论者所说的那样(Yuck)不要像这样使用字符串串联。您将需要设置SQL命令,然后传入参数。
然而,当您要求将来自多个数组的数据汇总到1个字符串时,这就不合时宜了。
遍历其中一个数组,如果它们都具有相同的计数,您将整齐地将数据合并到一个数组中。
for(int i = 0; i < array1.Length; i++)
{
results.Add(string.format("Hello you! {0} , {1}, {2}", array1[i], array2[i], datearray[i])
}
这将获得您想要的结果,但您的代码可以随时查看漏洞。你需要改变你的方法。
答案 2 :(得分:0)
如果所有条目的数量都相同,你可以简单地做一个for循环
for (int 1 = 0; i < datearray1.length; i++)
{
results.Add("select * from table1 d, table2 c
where d.specheader = c.specheader and c.true_false = true
and d.number = " + array2[i].ToString() + "
and d.date = '" + datearray1[i].ToShortDateString() + "'
and d.specnum like '%" + array1[i].ToString() + "';");
}