You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:57:00