C# sqlite 查询

c# sqlite query

C# SQLite 查询

String sql = @"SELECT user FROM '" + channel + "' ORDER BY currency DESC LIMIT 10"; 

您的查询有问题。 SELECT 仅从变量 channel 表示的 table 中提取一列。因此 reader 循环中的 GetString(1) 失败,因为索引 1 处没有字段(数组从索引零开始)。您需要更改该 GetString 索引。

那么return值就有问题了。你说你想要 return 一个单一的字符串但是没有 return 语句并且你没有任何单一的字符串 return

你可以写

public string top10()
{
    List<string> toplist = new List<string>();
    String sql = "SELECT user FROM '" + channel + "' ORDER BY currency DESC LIMIT 10";
    using (cmd = new SQLiteCommand(sql, myDB))
    {
        using (SQLiteDataReader r = cmd.ExecuteReader())
        {
            while (r.Read())
            {
                 toplist.Add(r.GetString(0));
            }
        }
    }
    return string.Join(",", toplist);
}

或者把方法的return类型改成

public List<string> top10()
{
   .....
   return toplist;
}

或到

public string[] top10()
{
   .....
   return toplist.ToArray();
}

我已将您的内部数组更改为 List<string>,因为如果您的记录少于 10 条,您的数组将包含空字符串,而列表将 return 仅找到找到的行。

您也可以试试这个答案。

    public string getTop10()
    {
        List<string> Toplist = new List<string>();
        string connection = "YourConnectionString";
        using (var con = new SQLiteConnection { ConnectionString = connection })
        {
            using (var command = new SQLiteCommand { Connection = con })
            {
                con.Open();

                command.CommandText = @"SELECT user FROM @channel ORDER BY currency DESC LIMIT 10";
                command.Parameters.AddWithValue("@channel", channel);
                using (var r = command.ExecuteReader())
                {
                    while(r.Read())
                    {
                        Toplist.Add(r.GetString(0));
                    }

                }

            }

        }
        return string.Join(",", Toplist);
    }