gpt4 book ai didi

c# - 为每个成员获取相同的属性(这不是想要的)

转载 作者:行者123 更新时间:2023-11-29 23:05:45 25 4
gpt4 key购买 nike

我正在创建几个静态全局实例。这是全局类:

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 reader 用独特的属性填充这些对象字段。

问题在于:对象的每个静态成员在分配后都具有相同的属性,即最后一个数据记录。但每条记录都应该是唯一的,就像在我的数据库中一样。这是作业类:

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来输出数据,正在调试和研究网络,但找不到解决方案。

这是订单类: 公共(public)类订单:I_Orders { protected 静态字符串版本; protected 静态字符串稀有度; protected 静态 uint id; protected 静态字符串名称; protected 静态字符串类型; protected 静态字符串从属关系; protected 静态 int 点; 私有(private)静态 int 跨度; protected 静态字符串要求; protected 静态字符串特价;

    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接口(interface)并在类Assignments中使用我的对象。但即使我在 Web 表单中修改对象(用于测试目的)而不调用赋值方法,仍然具有相同的属性。

最佳答案

您可能可以通过删除 Queue<int> assign_ids; 来修复它。改变

Convert.ToString(assign_ids.Peek())

循环外:

id_string = "1"

循环内:

id_string = i.ToString()

顺便说一句,您应该注意 IDisposable 处理、代码结构和命令参数处理。一次性对象最好使用 using 语句来处理。您应该避免代码重复(您在循环内部和外部复制命令执行代码)。避免字符串连接,这会导致 SQL 注入(inject)和 SQL 查询计划缓存的性能问题。了解如何在 sql 命令中使用参数。

关于c# - 为每个成员获取相同的属性(这不是想要的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28297356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com