【发布时间】:2019-01-17 17:40:14
【问题描述】:
我正在使用 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 我没有关闭数据读取器,但找不到在哪里,请帮助我...
【问题讨论】:
-
它实际上被抛出在哪一行?您应该能够调试并找到确切的行..
-
我在日志文件中遇到错误并且没有行信息
-
使用您可用的其他工具,而不仅仅是依赖您的日志文件。您应该能够运行任何体面的 IDE 并逐行调试它 带有断点并找出失败的地方。
-
问题是这个问题并不总是出现,有时也加载不出来或者添加新用户。
标签: c# mysql connection datareader