我有一个存储发票信息的数据库。每张发票最多可以有5个工单关系,每个工单有一个唯一的id号。
我执行了一条select语句,选择与一张发票相关的所有作业。
我尝试了许多方法来读取选定的作业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() : "";
}你能帮我弄一下这个吗?
发布于 2013-05-03 21:29:31
为什么要使用数组?您可以使用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();https://stackoverflow.com/questions/16359950
复制相似问题