我正在用Winforms,MySQL和C#做一个大学入学项目。我想获取或添加"用户"。所以我为此编写了代码:
public bool GetUser(ref clsConnection c)
{
MySqlCommand query = new MySqlCommand();
query.Connection = SQL;
query.CommandText = "SELECT ";
foreach (FieldInfo mi in typeof(clsConnection).GetFields())
{
foreach (StatsAttribute a in mi.GetCustomAttributes(typeof(StatsAttribute), false))
{
query.CommandText += a.Name + ", ";
}
}
query.CommandText = query.CommandText.Substring(0, query.CommandText.Length - 2);
query.CommandText += " FROM user WHERE User_Name='" + Escape(c.Username) + "'";
query.Prepare();
MySqlDataReader dr = query.ExecuteReader();
if (dr.HasRows)
{
foreach (FieldInfo mi in typeof(clsConnection).GetFields())
{
foreach (StatsAttribute a in mi.GetCustomAttributes(typeof(StatsAttribute), false))
{
dr.Read();
if (mi.FieldType.Name == "String")
{
mi.SetValue(c, (object)dr.GetString(a.Name));
}
else if (mi.FieldType.Name == "Double")
{
mi.SetValue(c, (object)dr.GetDouble(a.Name));
}
else if (mi.FieldType.Name == "Int32")
{
mi.SetValue(c, (object)dr.GetInt32(a.Name));
}
else if (mi.FieldType.Name == "UInt32")
{
mi.SetValue(c, (object)dr.GetUInt32(a.Name));
}
else if (mi.FieldType.Name == "Byte")
{
mi.SetValue(c, (object)dr.GetByte(a.Name));
}
else if (mi.FieldType.Name == "Boolean")
{
mi.SetValue(c, (object)dr.GetBoolean(a.Name));
}
else if (mi.FieldType.Name == "Date")
{
mi.SetValue(c, (object)dr.GetDateTime(a.Name));
}
}
}
}
else
{
dr.Close();
return false;
}
dr.Close();
return true;
}
public void AddUser(clsConnection c)
{
if (c.Username == "")
return;
List<string> users = new List<string>();
List<string> values = new List<string>();
int i = 0;
foreach (FieldInfo mi in typeof(clsConnection).GetFields())
{
foreach (StatsAttribute a in mi.GetCustomAttributes(typeof(StatsAttribute), false))
{
users.Add(a.Name);
values.Add("'" + mi.GetValue(c) + "'");
i++;
}
}
string query = "INSERT INTO user(" + string.Join(",", users.ToArray()) + ") VALUES (" + string.Join(",", values.ToArray()) + ");";
Query(query);
}
当我尝试使用新帐户或现有帐户连接时,我收到"连接已打开"的错误。我找不到我的问题在哪里...可能在某个地方是getuser或newuser im没有关闭数据读取器,但找不到在哪里,请帮助我...
我不确定您是否在此处关闭连接。尝试在关闭"MySqlDataReader"后添加它。
query.Connection.Close();
另外,您可以在下面看到一个示例;
https://dev.mysql.com/doc/dev/connector-net/8.0/html/M_MySql_Data_MySqlClient_MySqlCommand_ExecuteReader.htm