【问题标题】:List.Count always returns 0List.Count 总是返回 0
【发布时间】:2017-01-03 10:27:57
【问题描述】:

我正在创建一个公共静态变量List<>(来自MySQL 查询),但ListCount 总是返回0!到目前为止,我已经尝试了一切,但没有成功。这是我的代码:

public static List<string> GetHashedVars(string ID)
{
    List<string> lst = new List<string>();
    MySqlConnection conn;
    MySqlCommand cmd;
    MySqlDataReader reader;
    string connString, queryStr = "";
    connString = ConfigurationManager.ConnectionStrings["GameserverConnString"].ToString();
    using (conn = new MySqlConnection(connString))
    {
        //The query for execution
        queryStr = "SELECT * FROM account.account WHERE id_hashed=?hid LIMIT 1";
        //Open the connection to the database
        conn.Open();
        //execute command
        cmd = new MySqlCommand(queryStr, conn);
        cmd.Parameters.AddWithValue("?hid", ID);
        using (reader = cmd.ExecuteReader())
        {
            //Loop through results
            while (reader.Read())
            {
                lst.Add(reader.GetString(reader.GetOrdinal("id_hashed")));
                lst.Add(reader.GetString(reader.GetOrdinal("login_hashed")));
                lst.Add(reader.GetString(reader.GetOrdinal("webcode_hashed")));
                lst.Add(Encryption.CipherEncryption(reader.GetString(reader.GetOrdinal("status")).Trim()));
            }
        }
        reader.Close();
        conn.Close();
    }
    queryStr = "";
    reader = null;
    cmd = null;
    conn = null;
    connString = "";
    return lst;
}

【问题讨论】:

  • 你先调试了吗?您正在连接到数据库吗?
  • 你调试了吗?在您正在阅读并添加到列表的那一行,您能看到它是否确实添加了任何内容?
  • 查询是否返回任何行
  • 设置断点并使用调试工具检查变量。您可以轻松找到错误的地方。
  • 是的,我做到了。与数据库的连接是成功的,因为我有两次完全相同的功能(不同但相同的结构)!我什至在.ASPX 中有一个标签来显示项目总数Count(为0)。我不知道我还能尝试什么,它只是不断向我抛出 Index out of range 这个特定的异常......

标签: c# asp.net arrays list


【解决方案1】:

看起来您正在使用命名参数,但未正确设置参数。

? 用于非命名参数,@ 用于命名参数。由于您使用的数据库连接器不支持non named parameters,因此您必须在查询中使用@ 来遵循约定。这将按名称而不是按索引设置参数。

queryStr = "SELECT * FROM account.account WHERE id_hashed=@hid LIMIT 1";
...
cmd.Parameters.AddWithValue("@hid", ID);

来自msdn的解释。

用于 SQL Server 的 Microsoft .NET Framework 数据提供程序不 支持问号 (?) 占位符,用于将参数传递给 SQL 语句或由命令调用的存储过程 命令类型.文本。在这种情况下,必须使用命名参数。

【讨论】:

  • 我认为 @ 用于 SQL,? 用于 MySQL。无论如何,我解决了它,我认为记录中的哈希格式不好。非常感谢你们的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 2014-03-20
  • 2013-04-13
  • 2013-03-30
  • 2016-07-13
  • 2023-04-09
  • 2021-10-27
相关资源
最近更新 更多