【发布时间】:2015-02-03 11:05:33
【问题描述】:
我正在创建几个静态全局实例。这是全局类:
public static class global_instances {
public static Orders order1 = new Orders ();
public static Orders order2 = new Orders ();
public static Orders order3 = new Orders ();
public static Orders order4 = new Orders ();
public static Orders order5 = new Orders ();
public static Orders order6 = new Orders ();
}
Orders 类包含多个字段,例如 id、name 等。
我正在使用 mysql 阅读器为这些对象字段填充独特的属性。
问题是:对象的每个静态成员在分配它们后都具有相同的属性,正是最后一条数据记录。但是每条记录都应该是唯一的,就像在我的数据库中一样。这是作业类:
internal static class Assignments
{
private static Queue<int> assign_ids = new Queue<int>();
internal static void orders()
{
for (int i = 1; i <= 6; ++i)
{
assign_ids.Enqueue(i);
}
MySql.Data.MySqlClient.MySqlConnection sql_connection = null;
sql_connection = new MySql.Data.MySqlClient.MySqlConnection("server=localhost; user id=root; password=123; database=tables; persist security info=False");
MySql.Data.MySqlClient.MySqlCommand sql_command = new MySql.Data.MySqlClient.MySqlCommand();
sql_command.Connection = sql_connection;
sql_connection.Open();
string id_string = Convert.ToString(assign_ids.Peek());
sql_command.CommandText = "SELECT * FROM orders WHERE id='" + id_string + "';";
var sql_reader = sql_command.ExecuteReader();
for (int i = 1; i <= 6; ++i)
{
id_string = Convert.ToString(assign_ids.Peek());
sql_command.CommandText = "SELECT * FROM orders WHERE id='" + id_string + "';"; assign_ids.Dequeue();
while (sql_reader.Read())
{
switch (i)
{
case 1: global_instances.order1.modify(sql_reader.GetString(0), sql_reader.GetString(1), sql_reader.GetUInt16(2), sql_reader.GetString(3), sql_reader.GetString(4), sql_reader.GetString(5), sql_reader.GetInt16(6), sql_reader.GetInt16(7), sql_reader.GetString(8), sql_reader.GetString(9));
break;
case 2: global_instances.order2.modify(sql_reader.GetString(0), sql_reader.GetString(1), sql_reader.GetUInt16(2), sql_reader.GetString(3), sql_reader.GetString(4), sql_reader.GetString(5), sql_reader.GetInt16(6), sql_reader.GetInt16(7), sql_reader.GetString(8), sql_reader.GetString(9));
break;
case 3: global_instances.order3.modify(sql_reader.GetString(0), sql_reader.GetString(1), sql_reader.GetUInt16(2), sql_reader.GetString(3), sql_reader.GetString(4), sql_reader.GetString(5), sql_reader.GetInt16(6), sql_reader.GetInt16(7), sql_reader.GetString(8), sql_reader.GetString(9));
break;
case 4: global_instances.order4.modify(sql_reader.GetString(0), sql_reader.GetString(1), sql_reader.GetUInt16(2), sql_reader.GetString(3), sql_reader.GetString(4), sql_reader.GetString(5), sql_reader.GetInt16(6), sql_reader.GetInt16(7), sql_reader.GetString(8), sql_reader.GetString(9));
break;
case 5: global_instances.order5.modify(sql_reader.GetString(0), sql_reader.GetString(1), sql_reader.GetUInt16(2), sql_reader.GetString(3), sql_reader.GetString(4), sql_reader.GetString(5), sql_reader.GetInt16(6), sql_reader.GetInt16(7), sql_reader.GetString(8), sql_reader.GetString(9));
break;
case 6: global_instances.order6.modify(sql_reader.GetString(0), sql_reader.GetString(1), sql_reader.GetUInt16(2), sql_reader.GetString(3), sql_reader.GetString(4), sql_reader.GetString(5), sql_reader.GetInt16(6), sql_reader.GetInt16(7), sql_reader.GetString(8), sql_reader.GetString(9));
break;
}//end switch
}
sql_reader.Close();
sql_reader = sql_command.ExecuteReader();
}
sql_connection.Close();
}
}
我正在使用webform输出数据,正在调试和研究网络,但找不到解决方案。
这是订单类: 公共类订单:I_Orders { 受保护的静态字符串版本; 受保护的静态字符串稀有性; 受保护的静态 uint id; 受保护的静态字符串名称; 受保护的静态字符串类型; 受保护的静态字符串关联; 受保护的静态 int 点; 私有静态整数跨度; 受保护的静态字符串要求; 受保护的静态字符串特价;
internal Orders (){
edition = "none";
rarity = "";
id = 0;
name = "";
type = "";
affilations = "";
points = 0;
span = 0;
requirements = "";
specials = "";
}
public void modify(string edi, string rar, uint i_d, string nam, string typ, string aff, int poi, int spa, string requ, string spec) {
edition = edi;
rarity = rar;
id = i_d;
name = nam;
type = typ;
affilations = aff;
points = poi;
span = spa;
requirements = requ;
specials = spec;
}
public string get_edition() { return edition; }
public string get_rarity() { return rarity; }
public uint get_id() { return id; }
public string get_name() { return name; }
public string get_type() { return type; }
public string get_affilations() { return affilations; }
public int get_points() { return points; }
public int get_span() { return span; }
public string get_requirements() { return requirements; }
public string get_specials() { return specials; }
}
我需要访问整个项目中的订单对象。你能给我全球替代品吗?
我正在使用switch语句,因为sql语句更改了6次,并且只修改了一次。
编辑
我实现了 IDisposable 接口并在作业类中使用我的对象。但仍然具有相同的属性,即使我在我的网络表单中修改对象(用于测试目的)而不调用分配方法。
【问题讨论】:
-
请向我们展示非常规命名的
objects类的代码。另请注意,像这样的全局状态是一个真的坏主意,尤其是在网络环境中......而且你所有的变量名也是非常规的,你不是妥善处理您的任何资源。 -
这就是你正在做的 - 重复相同的查询六次,每次将所有行一一写入同一个全局实例上,
i指向的那个,不是 与结果的顺序有关。这段代码有太多问题——全局变量、迭代、连接语句...... -
这段代码没有意义。为什么不简单地选择 ID 在所需范围内的所有记录?
-
我随机选择了 6 个超过 50 的 id。这是我的帖子中留下的,对不起。