2017-01-03 153 views
0

我创建的变量公共静态List<>(从MySQL查询),但ListCount总是返回0!我尝试了一切,但没有成功。这里是我的代码:List.Count总是返回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; 
} 
+1

你有没有先调试过它?你是否连接到数据库? –

+0

你有调试吗?在你阅读并添加到列表中的行可以看到它是否实际添加了任何内容? – JonE

+0

查询是否返回任何行 – Saurav

回答

3

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

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

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

msdn的说明。

微软.NET Framework数据提供SQL Server不 支持问号(?)占位符传递参数给 SQL语句或 CommandType.Text的命令调用的存储过程。在这种情况下,必须使用命名参数。

+0

'@'是用于SQL的,'?'用于MySQL我认为。无论如何,我解决了它,我认为这是记录中的哈希格式。非常感谢你的帮助。 – Dev