【问题标题】:C# SQL "Index was outside the bounds of the array." [closed]C# SQL“索引超出了数组的范围。” [关闭]
【发布时间】:2021-11-04 17:59:35
【问题描述】:

我一直在学习如何使用 C# 创建 SQL 库,但我遇到了一个问题。 这里我正在测试如何将文本行的值返回到字符串

为什么编译器会在这里出错?我阅读了方法列表,我的数据库中的“名字”列还有 3 个值。为什么我只能看到一个索引?

提前感谢您的帮助

{
    
    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";
            SqliteDataReader reader = command.ExecuteReader();
            Console.WriteLine(reader);
           

            if ( reader.Read() )
            {
                Console.WriteLine("Reading...");
                Thread.Sleep(1000);
                string myVar = reader.GetString(2); //Index was outside the bounds of the array." 
                
                 Console.WriteLine(myVar);

            }
            else
            {
                Console.WriteLine("Dont Read");
            }
            
        }
    }
}

}

【问题讨论】:

  • reader.GetString(0); 您的 SQL 查询中只有 一个 字段 (FirstName)
  • reader.GetString(2) 表示将结果集当前记录中第三列的值作为字符串提供给我。您在该查询中没有三列,而只有一列。
  • 第三行与第三列不同。您将不得不遍历阅读器。
  • 查看任何 DataReader 示例,您会发现您可以通过遍历行来访问行。您可以通过使用 ordinal 数字作为 reader.GetString(0); 等表达式中的索引或使用列名:reader.GetString("FirstName"); 来访问列。见:docs.microsoft.com/en-us/dotnet/framework/data/adonet/…

标签: c# sql sqlite


【解决方案1】:

发生这种情况是因为作为documentation 的方法GetString(int) 说“将指定列的值作为字符串获取”。根据您向我们展示的代码,您只是从表格 Persons 中检索一列,这就是您收到异常的原因,在这种情况下只有 GetString(0) 可以工作。

【讨论】:

  • 非常感谢,我知道这有点可笑xD,从无到有,累了是不行的。我会冷静地研究那个文件thx
猜你喜欢
  • 1970-01-01
  • 2015-11-06
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多