Ela*_*lay 5 c# database oracle datatable
我的代码中出现以下异常
\n\nIndex was out of range. Must be non-negative and less than the size of the collection.\nParameter name: index\nRun Code Online (Sandbox Code Playgroud)\n\n我无法理解为什么它会抛出该异常。
\n\n程序流程是这样的:
\n\n我有数字集合,例如 1 到 200。对于集合中的每个数字,它都会运行以下代码。直到120,它没有抛出异常,但是对于121,它抛出异常。而且它是随机的,如果再次运行该程序,我可能会得到与 123 相同的异常。
\n\n可能是什么原因?与数据库连接有关吗?我的代码有问题吗?如果是这样,那么它不应该在第一次迭代中抛出吗?
\n\n我尝试过的:
\n\npublic DataTable GetGrade(DataTable dtReportTbl)\n {\n dtReportTbl.Columns.Add("Salary_Grade", typeof(System.String));\n dtReportTbl.Columns.Add("InsertedDate", typeof(DateTime));\n string query = "select Grade from student_grade where myTable in (\'JMS\',\'JSM\') and student_Num in ({StudentNums}) order by student_Num";\n\xc2\xa0\n try\n {\n using (OracleConnection con = new OracleConnection(connectionString))\n {\n List<string> storeNums = new List<string>();\n\xc2\xa0\n\n foreach (DataRow row in dtReportTbl.Rows)\n {\n storeNums.Add(row["store"].ToString());\n }\n\xc2\xa0\n var cmd = new OracleCommand(query, con);\n\xc2\xa0\n // extension method to get StudentNums as to achieve cmd.Parameters.Add(new OracleParameter("pStudentNums", studentNum)\n cmd.AddArrayParametersOra(storeNums, "StudentNums");\n\xc2\xa0\n var rdr = cmd.ExecuteReader();\n List<string> salGradelist = new List<string>();\n while (rdr.Read())\n {\n salGradelist.Add(rdr["Grade"].ToString());\n }\n\xc2\xa0\n int i = 0;\n foreach (DataRow row in dtReportTbl.Rows)\n {\n row["Grade"] = salGradelist[i];\n row["RecordInsertedDate"] = DateTime.Today;\n i++;\n }\n }\n }\n catch (Exception ex)\n {\n throw;\n }\n\xc2\xa0\n return dtReportTbl;\n }\nRun Code Online (Sandbox Code Playgroud)\n
要找到答案,您需要在应用程序运行时查看应用程序中的数据 - 而我们不能这样做!所以,这将取决于你。在方法的第一行放置一个断点,然后通过调试器运行代码。然后查看您的代码和数据并找出应该手动发生的情况。然后单步执行每一行,检查您期望发生的情况是否确实发生。如果不是,那就是你遇到了问题,你可以回溯(或再次运行它并更仔细地查看)以找出原因。
最可能的原因是查询返回的行数与数组中的元素数不同。
int i = 0;
foreach (DataRow row in dtReportTbl.Rows)
{
... = salGradelist[i]; // <-- Exception here
...
i++;
}
Run Code Online (Sandbox Code Playgroud)
如果查询返回的行数少于数组中元素的数量,那么您的代码将忽略后面的元素。
但如果它返回更多行,那么变量 i 将超出数组的末尾,并且您将得到“索引越界”异常。
您需要调试代码和查询,以找出返回的行数与数组中的元素数不匹配的原因。