报错‘位置0处无行数据’但数据库存在记录的技术求助
问题:执行数据库查询时触发“位置0处没有行数据”错误(数据库存在对应记录)
我一直碰到错误提示**‘位置0处没有行数据’**,但明明数据库里存在IsActive = 1的FinancialYearTable记录。
相关代码
string FinancialYear_ID = (DatabaseAccess.Retrive("select top 1 FinancialYearID from FinancialYearTable where IsActive = 1") != null ? Convert.ToString(DatabaseAccess.Retrive("select top 1 FinancialYearID from FinancialYearTable where IsActive = 1").Rows[0][0]) : string.Empty);
问题分析与解决建议
- 代码存在重复执行两次数据库查询的问题:第一次查询返回非空,但第二次查询可能因为并发数据变更(比如其他操作临时把
IsActive改成0)、事务隔离级别或者数据库连接上下文差异,导致返回空结果,这时访问Rows[0][0]就会触发错误。 - 需确认
DatabaseAccess.Retrive方法的逻辑:如果查询无结果时返回的是空DataTable而非null,那你的null判断完全无效,直接访问行数据必然报错。
修正后的代码
// 缓存查询结果,避免重复调用数据库 var resultTable = DatabaseAccess.Retrive("select top 1 FinancialYearID from FinancialYearTable where IsActive = 1"); // 同时判断表不为空且存在行数据 string FinancialYear_ID = (resultTable != null && resultTable.Rows.Count > 0) ? Convert.ToString(resultTable.Rows[0][0]) : string.Empty;
额外排查点
- 检查
IsActive字段类型:如果是字符串类型,=1的条件可能不匹配(比如实际值是"1"或"True"),需调整查询语句。 - 数据库事务与隔离级别:确认是否有未提交的事务导致当前查询看不到数据,或者隔离级别设置过高(比如REPEATABLE READ)引发的问题。
DatabaseAccess.Retrive方法实现:查看该方法是否在查询无结果时返回null还是空DataTable,对应调整判断逻辑。
内容的提问来源于stack exchange,提问作者Frank ugo
相关产品推荐
相关产品推荐

