몇 가지 정적 전역 인스턴스를 생성합니다. 다음은 전역 클래스입니다.모든 구성원에 대해 동일한 속성 가져 오기 (원하지 않는 항목)
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, 이름 등과 같은 여러 필드가 있습니다.
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();
}
}
웹 양식을 사용하여 데이터를 출력하고 디버깅하고 그물을 조사했지만 해결책을 찾지 못했습니다.
다음은 주문 클래스입니다. public class 주문 : I_Orders { protected static string edition; 보호 된 정적 문자열 희박; static static uint id; protected static string name; 보호 된 정적 문자열 유형. static string affilations 보호. protected static int points; private static int span; 보호 된 정적 문자열 요구 사항. 보호 된 정적 문자열 스페셜;
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; }
}
전체 프로젝트의 주문 개체에 액세스해야합니다. 글로벌 대안을 줄 수 있습니까?
SQL 문이 6 번 변경되고 주문을 한 번만 수정하기 때문에 switch 문을 사용하고 있습니다.
편집은 내가으로 IDisposable 인터페이스를 구현하는 클래스 할당에 내 개체를 사용하여. 그러나 할당 방법을 호출하지 않고도 내 웹폼에서 객체를 수정하더라도 (테스팅 목적으로) 동일한 속성을 갖습니다.
이름이 정해지지 않은'objects' 클래스의 코드를 보여주십시오. 또한 이와 같은 전역 상태는 웹 컨텍스트에서 특히 * 나쁜 * 아이디어이며, 모든 변수 이름도 비 통상적이며 리소스를 적절히 처분하지 못한다는 점에 유의하십시오. –
그게 바로 당신이하고있는 일입니다. 동일한 쿼리를 6 번 반복합니다. 매번 같은 글로벌 인스턴스 (모든 글로벌 인스턴스)에 하나씩 모든 행을 씁니다.이 행은 결과의 순서와 관련이없는 'i'가 가리키는 행입니다. 이 코드에는 너무 많은 문제가 있습니다. 전역 변수, 반복 변수, 연결 문 ... –
이 코드는 의미가 없습니다. 원하는 범위의 ID를 가진 모든 레코드를 선택하기 만하면됩니까? –