循环遍历多个数组以连接
本文关键字:连接 数组 遍历 循环 | 更新日期: 2023-09-27 18:08:05
我有3个数组。两个是字符串数组,一个是日期/时间数组。我从用户输入中提取了全部3个。每个数组总是有相同数量的元素,所以我想做的是能够一次遍历所有3个元素来生成一个字符串。
I was trying:
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次。是否有一种方法可以同时使用所有三个数组连接字符串(例如数组1的第1项,数组2的第1项,数组3的第1项-然后继续创建下一个字符串,数组1的第2项,数组2的第2项,数组3的第2项,等等)
任何输入将是感激的。谢谢你!
正如第一个评论者所说(呸),不要像那样在SQL中使用字符串连接。您将需要设置SQL命令,然后传入参数。
然而,这是旁边的点,因为你正在询问滚动数据从多个数组到一个字符串。
遍历其中一个数组,如果它们都具有相同的计数,则可以将数据整齐地放在一个数组中。
for(int i = 0; i < array1.Length; i++)
{
results.Add(string.format("Hello you! {0} , {1}, {2}", array1[i], array2[i], datearray[i])
}
这将得到您想要的结果,但您的代码是开放的漏洞,因为它的立场。你需要改变你的方法。
因为你的循环是嵌套的,你会得到array2
的每个值与array1
中的每个值相结合(datearray1
也是如此)。这就是你得到太多结果的原因。
您的循环将像这样工作(我使用了类似的局部变量来避免重复输入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注入"以了解原因)。如果使用存储过程,效果会更好。
如果所有条目的数量相同你可以简单地执行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() + "';");
}