2017-01-03 150 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