Member 11259478 Ответов: 1

Как сделать цикл через таблицу SQL для установки глобальных переменных


Всем Привет

У меня есть таблица tblFlags с 3 столбцами UniqID, FlagName,FlagValue

Эта таблица используется для хранения настроек приложения т. е. DataPathBackup

Что я хотел бы сделать, так это пройтись по этой таблице, чтобы установить общедоступные статические строки при запуске

ie public static string "FlagName" = " FlagValue"
это должно вернуть: public static string DataPathBackup = z:\AppBackup\


Как я смогу этого достичь?

Что я уже пробовал:

Я установил некоторые значения по умолчанию
т.е.
публичная статическая строка DataPathBackup= @"Z:\AppBackup\";

затем я вызываю FillFlags()

Снизу;
Джей возвращает правильный FlagName и возвращает к правильной FlagValue


поэтому я хотел бы иметь что-то вроде
общественности статической строки "Дж" = "к"

затем это будет переопределять Мои настройки по умолчанию, если они были найдены в этой таблице
public void FillFlags()
{
    string connectionString = null;
    SqlConnection cnn,cnn2;
    connectionString = CString;
    cnn = new SqlConnection(connectionString);
    cnn2 = new SqlConnection(connectionString);
    SqlDataReader dr,dr2;

        SqlCommand comm = new SqlCommand("SELECT [FlagName],[FlagValue] from tblFlags");

    comm.Connection = cnn;
        cnn.Open();
        dr = comm.ExecuteReader();

        while (dr.Read())
        {
            string j = dr["FlagName"].ToString();
           
            SqlCommand comm1 = new SqlCommand("SELECT [FlagValue] from tblFlags WHERE FlagName='"+ j +"'");
            comm1.Connection = cnn2;
            cnn2.Open();
            dr2 = comm1.ExecuteReader();
            MessageBox.Show(j);
            while (dr2.Read())
            {
                
                string k=dr2["FlagValue"].ToString();
                //j = k;
               
                MessageBox.Show(k);
            }
            dr2.Close();
            dr2.Dispose();
            cnn2.Close();
        }
        dr.Close();
        dr.Dispose();

        cnn.Close();
}

Tomas Takac

В чем проблема с вашим кодом? Хотя несколько комментариев:
1) Использование оператор using[^] с одноразовыми предметами.
2) Вы можете использовать Метод ExecuteScalar[^] когда вы извлекаете одно значение из базы данных.
3) рассмотрите возможность загрузки всех флагов и обработки всего списка сразу.

Member 11259478

Привет Томас

Спасибо, что нашли время ответить на мой вопрос

Он вообще не устанавливает мою статическую строку

В приведенном ниже разделе:
если я изменю то J=K, чтобы DataPathBackup = K, то оно работает

Проблема в том, что я не хотел бы указывать публичную статическую строку вручную - она должна быть получена из Tblflags FlagName

как бы я смог сделать весь список за 1 раз?

Спасибо



пока (рп2.Читать())
{

строка k=dr2 ["FlagValue"].Метод toString();
// / = к;

Ящик для сообщений.Шоу(к);
}

1 Ответов

Рейтинг:
2

OriginalGriff

Хотя это, вероятно, возможно сделать, это не делает его хорошей идеей. Я подозреваю, что можно сделать именно то, что вы хотите, используя отражение:

public static string MyVariable;
...
MyVariable = "Old value";
SetVariableByName("MyVariable", "New value for MyVariable");
Console.WriteLine(MyVariable);

И получить
"New value for MyVariable"
напечатанный. (Но вам придется написать метод, и это будет сложно)

Но это нехорошо, медленно и склонно к ошибкам.
Вместо этого рассмотрите возможность использования словаря:
public static Dictionary<string, object> MySettings = new Dictionary<string, object>();

И используйте имя и значение, которые вы извлекаете из своей БД, чтобы установить записи в ней:
MySettings["MyVariable"] = "New value for MyVariable";
Гораздо проще понять, что происходит, и гораздо безопаснее!