从数据库存储中选择5个数组中的每一行?

时间:2013-05-03 13:21:56

标签: c# sql arrays select sql-server-ce

我有一个存储发票信息的数据库。每张发票最多可以有5个作业关系,每个作业都有唯一的ID号。

我执行了一个选择语句,选择与单张发票相关的所有工作。

我尝试了很多方法来读取所选的作业ID并将它们存储在jobArray中。我更喜欢让它选择使用for循环,但我尝试使用textBoxes的大多数方法(我用我的数组替换)

这是我最近的代码;

     SqlCeCommand cmdCountJobs = new SqlCeCommand("SELECT COUNT(Job_ID)AS INVCOUNT FROM Invoice WHERE Invoice_Number = " + maxInvoice + " ", cn);
        cmdCountJobs.Connection = cn;
        reader = cmdCountJobs.ExecuteReader();
        while (reader.Read())
        {
            countValue = Convert.ToInt32(reader["INVCOUNT"].ToString());
        }         
        SqlCeCommand cmdJobSearch = new SqlCeCommand("SELECT Job_ID as ID FROM Invoice WHERE Invoice_Number = " + maxInvoice + " ", cn);
        cmdJobSearch.Connection = cn;
        reader = cmdJobSearch.ExecuteReader(); 
        SqlCeDataAdapter da = new SqlCeDataAdapter(cmdJobSearch);
        jobArray[0] = (reader.Read()) ? reader["ID"].ToString() : "";
        jobArray[1] = (reader.Read()) ? reader["ID"].ToString() : "";
        jobArray[2] = (reader.Read()) ? reader["ID"].ToString() : "";
        jobArray[3] = (reader.Read()) ? reader["ID"].ToString() : "";
        jobArray[4] = (reader.Read()) ? reader["ID"].ToString() : "";   
        }
你可以帮我这个吗?

1 个答案:

答案 0 :(得分:4)

为什么要使用数组?您可以使用List(Of Int)使用正常循环存储ID号 鉴于列表的性质,您不需要事先知道设置数组大小的作业数量,因此您可以拥有一个仅包含4个作业的发票或一个包含6个作业的作业,但您的代码逻辑不需要检查一下。

    List<int> jobs = new List<int>();
    SqlCeCommand cmdJobSearch = new SqlCeCommand("SELECT Job_ID as ID FROM Invoice " + 
                                "WHERE Invoice_Number = @ivc", cn);
    cmdJobSearch.Connection = cn;
    cmdJobSearch.Parameters.AddWithValue("@ivc", maxInvoice);
    reader = cmdJobSearch.ExecuteReader(); 
    while(reader.Read())
         jobs.Add(Convert.ToInt32(reader["ID"]));

另请注意,我已更改您的查询以避免字符串连接。可能情况并非如此,但使用参数化查询避免Sql Injection

是一个好习惯。

当然,如果您需要在代码的其余部分的某处使用数组,则可以像数组一样轻松引用该列表

   TextBox1.Text = jobs[0].ToString();

或使用

将列表转换回数组
   int[] ids = jobs.ToArray();