我有一个存储发票信息的数据库。每张发票最多可以有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() : "";
}
你可以帮我这个吗?
答案 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();