Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过多个数组循环以连接_C# - Fatal编程技术网

C# 通过多个数组循环以连接

C# 通过多个数组循环以连接,c#,C#,我有3个数组。两个是字符串数组,一个是日期/时间数组。我从用户输入中提取了所有3个。每个数组总是会有相同数量的条目,所以我想做的是能够一次遍历所有3个条目来生成一个字符串 我试着: List<string> results = new List<string>(); // select foreach (string line in array1) { foreach (strin

我有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);
        }
列表结果=新列表();
//挑选
foreach(数组1中的字符串行)
{
foreach(数组中的字符串行2)
{
foreach(datearray1中的DateTime日期)
{
结果.Add(“从表1 d、表2 c中选择*,其中d.specheader=c.specheader和c.true\U false=true和d.number=“+lines.ToString()+”和d.date=”“+date.ToSortDateString()+”,和d.specnum类似“%”+line.ToString()+“;”;
}
}
}
结果:ToArray();
foreach(结果中的字符串行)
{
MessageBox.Show(行);
}
用户将信息输入到3个框中,我只是尝试根据输入连接sql语句。然而,当我试着这样做时,当我只有2个条目时,它循环了6次。是否有一种方法可以同时使用所有3个数组连接字符串(如数组1的条目1、数组2的条目1、数组3的条目1-然后继续创建下一个字符串、数组1的条目2、数组2的条目2、数组3的条目2等)


如有任何意见,将不胜感激。谢谢大家!

如果所有项目的条目数相同,则可以简单地执行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() + "';");                        
                }
for(int 1=0;i
因为循环是嵌套的,所以得到的是
array2
的每个值都与
array1
中的每个值相结合(与
datearray1
类似)。这就是得到太多结果的原因

您的循环将按照预期的方式工作(我使用了类似的局部变量,以避免重新键入
结果。添加
行,并明确代码与您的代码有何不同):

for(int i=0;i

附带说明:以这种方式构建数据库查询效率低下且非常不安全(请阅读“Sql注入”了解原因)。如果使用存储过程,您会看到更好的结果。

正如第一位评论者所说(恶心)不要像那样将字符串串联到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])
}
for(int i=0;i

这将获得您想要的结果,但您的代码目前存在漏洞。您需要改变方法。

不要在C#代码中使用SQL语句的字符串连接。请阅读SQL注入。因此,我阅读了SQL注入。生成的SQL查询将显示在一个窗口中,仅供我复制。我是jus我不想节省时间,因为通常有很多这样的记录。但是我只想复制文本(这将是生成的SQL命令)并将其粘贴到以后使用。从这个意义上讲,我仍然有风险吗?因为我将能够在命令运行之前看到它,它不是自动的。或者您可以使用参数化的SqlCommand,而不仅仅是存储过程。
for(int i = 0; i < array1.Length; i++)
{
    results.Add(string.format("Hello you! {0} , {1}, {2}", array1[i], array2[i], datearray[i])
}