C#操作SQLite调用SqliteDataReader.GetString报索引越界如何解决
错误原因
SqliteDataReader的GetString()方法传入的参数是查询结果的列索引,从0开始计数,不是行的索引- 你的查询语句是
SELECT FirstName FROM Persons,仅返回FirstName1列,合法的列索引只有0,传入2自然超出数组边界触发报错 - 你要读取的第3条行数据,需要通过多次调用
reader.Read()方法遍历:每次调用reader.Read()就会将游标移动到下一行,返回true说明当前有有效行数据,返回false说明已经遍历完所有行
修正方案
场景1:仅读取第3行的FirstName值
{ static void Main(string[] args) { string dbName = "URI=file:testeDB.db"; using (var connection = new SqliteConnection(dbName)) { connection.Open(); var command = connection.CreateCommand(); command.CommandText = "SELECT FirstName FROM Persons"; using (SqliteDataReader reader = command.ExecuteReader()) { // 跳过前2行,定位到第3行 reader.Read(); // 第1行 reader.Read(); // 第2行 if (reader.Read()) // 第3行 { Console.WriteLine("Reading..."); Thread.Sleep(1000); // 仅返回1列,列索引只能填0 string myVar = reader.GetString(0); Console.WriteLine(myVar); } else { Console.WriteLine("未读取到有效数据"); } } } } }
场景2:遍历所有3行的FirstName值
把原来的if (reader.Read())判断改为while (reader.Read())循环即可:
while (reader.Read()) { string myVar = reader.GetString(0); Console.WriteLine(myVar); }
内容的提问来源于stack exchange,提问作者Rufustyle
相关产品推荐
相关产品推荐

