C# Count始终返回0
我正在创建一个变量的公共静态C# Count始终返回0,c#,asp.net,arrays,list,C#,Asp.net,Arrays,List,我正在创建一个变量的公共静态列表(从MySQL查询),但是列表的计数总是返回0!到目前为止,我什么都试过了,但没有成功。这是我的密码: public static List<string> GetHashedVars(string ID) { List<string> lst = new List<string>(); MySqlConnection conn; MySqlCommand cmd; MySqlDataReader
列表
(从MySQL
查询),但是列表
的计数总是返回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;
}
公共静态列表GetHashedVars(字符串ID)
{
List lst=新列表();
mysqlconnectionconn;
MySqlCommand命令cmd;
MySqlDataReader;
字符串connString,queryStr=“”;
connString=ConfigurationManager.ConnectionString[“GameserverConnString”].ToString();
使用(conn=newmysqlconnection(connString))
{
//执行的查询
queryStr=“从account.account中选择*,其中id\u散列=?hid LIMIT 1”;
//打开与数据库的连接
conn.Open();
//执行命令
cmd=新的MySqlCommand(queryStr,conn);
cmd.Parameters.AddWithValue(“?hid”,ID);
使用(reader=cmd.ExecuteReader())
{
//循环浏览结果
while(reader.Read())
{
lst.Add(reader.GetString(reader.GetOrdinal(“id_散列”));
lst.Add(reader.GetString(reader.GetOrdinal(“login_hash”));
lst.Add(reader.GetString(reader.GetOrdinal(“webcode_hashed”));
lst.Add(Encryption.CipherEncryption(reader.GetString(reader.GetOrdinal(“status”)).Trim());
}
}
reader.Close();
康涅狄格州关闭();
}
queryStr=“”;
reader=null;
cmd=null;
conn=null;
connString=“”;
返回lst;
}
看起来您正在使用命名参数,但未正确设置参数
?
用于非命名参数,@
用于命名参数。由于您使用的数据库连接器不支持非命名参数
,因此您必须遵循惯例,在查询中使用@
。这将按名称而不是索引设置参数
queryStr = "SELECT * FROM account.account WHERE id_hashed=@hid LIMIT 1";
...
cmd.Parameters.AddWithValue("@hid", ID);
他解释说
用于SQL Server的Microsoft.NET Framework数据提供程序不可用
支持问号(?)占位符,用于将参数传递给
SQL语句或由命令调用的存储过程
CommandType.Text。在这种情况下,必须使用命名参数
看起来您正在使用命名参数,但未正确设置参数
?
用于非命名参数,@
用于命名参数。由于您使用的数据库连接器不支持非命名参数
,因此您必须遵循惯例,在查询中使用@
。这将按名称而不是索引设置参数
queryStr = "SELECT * FROM account.account WHERE id_hashed=@hid LIMIT 1";
...
cmd.Parameters.AddWithValue("@hid", ID);
他解释说
用于SQL Server的Microsoft.NET Framework数据提供程序不可用
支持问号(?)占位符,用于将参数传递给
SQL语句或由命令调用的存储过程
CommandType.Text。在这种情况下,必须使用命名参数
你先调试过吗?你正在连接到数据库吗?你调试过了吗?在您正在读取并添加到列表中的那一行,您可以看到它是否确实添加了任何内容吗?查询是否返回任何行集合断点并使用调试工具检查变量。您可以很容易地找到出错的地方。是的,我这样做了。连接到数据库是成功的,因为我有完全相同的功能(不同但相同的结构)两次!我甚至在.ASPX
中得到了一个标签,显示项目的总数计数
(为0)。我不知道还有什么可以尝试的它总是把我索引超出范围
这个特殊的异常…你先调试过吗?你正在连接到数据库吗?你调试过了吗?在您正在读取并添加到列表中的那一行,您可以看到它是否确实添加了任何内容吗?查询是否返回任何行集合断点并使用调试工具检查变量。您可以很容易地找到出错的地方。是的,我这样做了。连接到数据库是成功的,因为我有完全相同的功能(不同但相同的结构)两次!我甚至在.ASPX
中得到了一个标签,显示项目的总数计数
(为0)。我不知道还有什么可以尝试它只是不断地把我的索引超出范围
这个特殊的异常…@
是SQL的,?
是MySQL的,我想。不管怎样,我解决了它,我认为它在记录中是糟糕的散列格式。非常感谢你们的帮助。@
代表SQL,?
代表MySQL。不管怎样,我解决了它,我认为它在记录中是糟糕的散列格式。非常感谢你们的帮助。