Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Кодило
 Аватар для r0fL
251 / 179 / 23
Регистрация: 25.11.2009
Сообщений: 685

Переполнение стека

27.04.2011, 01:30. Показов 1175. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу класс для своего проекта для работы с базой, сохранения настроек и т.п., так вот при тестировании поймал непонятный для меня баг.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace MySQLLib
{
    public class DataBase
    {
        #region Variables
        /// <summary>
        /// Файл настроек
        /// </summary>
        private const string SettingsFile = @"settings.dbs";
 
        /// <summary>
        /// Строка для подключения к Базе
        /// </summary>
        public string ConnectionString { get; set; }
 
        /// <summary>
        /// Пользователь базы данных
        /// </summary>
        public string Db_User
        {
            get { return Db_User; }
            set
            {
                Db_User = value;
                SetConnectionString();
            }
        }
 
        /// <summary>
        /// Пароль пользователя
        /// </summary>
        public string Db_Password
        {
            get { return Db_Password; }
            set
            {
                Db_Password = value;
                SetConnectionString();
            }
        }
 
        /// <summary>
        /// Имя базы данных
        /// </summary>
        public string Db_Name
        {
            get { return Db_Name; }
            set
            {
                Db_Name = value;
                SetConnectionString();
            }
        }
 
        /// <summary>
        /// Адрес базы данных
        /// </summary>
        public string Db_Source
        {
            get { return Db_Source; }
            set
            {
                Db_Source = value;
                SetConnectionString();
            }
        }
        #endregion
 
        /// <summary>
        /// Генерация строки подключения
        /// </summary>
        /// <param name="user">Пользователь</param>
        /// <param name="password">Пароль</param>
        /// <param name="dbname">Имя базы</param>
        /// <param name="dbsource">Адрес базы</param>
        private void SetConnectionString(string user, string password, string dbname, string dbsource)
        {
            this.ConnectionString = String.Format("Database={0};Data Source={1};User Id={2};Password={3}", dbname, dbsource, user, password);
        }
 
        /// <summary>
        /// Перегрузка генерации строки подключения
        /// </summary>
        private void SetConnectionString()
        {
            this.ConnectionString = String.Format("Database={0};Data Source={1};User Id={2};Password={3}", this.Db_Name, this.Db_Source, this.Db_User, this.Db_Password);
        }
 
        /// <summary>
        /// Инициализация класса DataBase
        /// </summary>
        public DataBase()
        {
            this.Db_User = string.Empty;
            this.Db_Password = string.Empty;
            this.Db_Name = string.Empty;
            this.Db_Source = string.Empty;
            SetConnectionString();
        }
 
        /// <summary>
        /// Параметризированная инициализация класса DataBase
        /// </summary>
        /// <param name="Db_User">Пользователь базы данных</param>
        /// <param name="Db_Password">Пароль пользователя базы данных</param>
        /// <param name="Db_Name">Название базы данных</param>
        /// <param name="Db_Source">Адрес базы данных</param>
        public DataBase(string Db_User, string Db_Password, string Db_Name, string Db_Source)
        {
            this.Db_User = Db_User;
            this.Db_Password = Db_Password;
            this.Db_Name = Db_Name;
            this.Db_Source = Db_Source;
            SetConnectionString();
        }
 
        /// <summary>
        /// Загрузка настроек из файла
        /// </summary>
        public void LoadSettings()
        {
            DataBaseSettings dbs = new DataBaseSettings();
            dbs.Load(SettingsFile);
            this.Db_Name = dbs.Db_Name;
            this.Db_Password = dbs.Db_Password;
            this.Db_Source = dbs.Db_Source;
            this.Db_User = dbs.Db_User;
        }
 
        /// <summary>
        /// Сохранение настроек в файл
        /// </summary>
        public void SaveSettings()
        {
            DataBaseSettings dbs = new DataBaseSettings(this);
            dbs.Save(SettingsFile);
        }
    }
 
    [Serializable]
    public class DataBaseSettings
    {
 
        /// <summary>
        /// Пользователь базы данных
        /// </summary>
        public string Db_User
        {
            get;
            set;
        }
 
        /// <summary>
        /// Пароль пользователя
        /// </summary>
        public string Db_Password
        {
            get;
            set;
        }
 
        /// <summary>
        /// Имя базы данных
        /// </summary>
        public string Db_Name
        {
            get;
            set;
        }
 
        /// <summary>
        /// Адрес базы данных
        /// </summary>
        public string Db_Source
        {
            get;
            set;
        }
 
        /// <summary>
        /// Сохранение настроек базы данных в файл
        /// </summary>
        /// <param name="path">Путь к файлу</param>
        public void Save(string path)
        {
            using (StreamWriter sw = new StreamWriter(File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite)))
            {
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(sw.BaseStream, this);
            }
        }
 
        /// <summary>
        /// Загрузка настроек базы данных из файла
        /// </summary>
        /// <param name="path">Путь к файлу</param>
        public void Load(string path)
        {
            if (!File.Exists(path))
                return;
            using (StreamReader sr = new StreamReader(File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite)))
            {
                BinaryFormatter bf = new BinaryFormatter();
                object obj = bf.Deserialize(sr.BaseStream);
                if (obj is DataBaseSettings)
                {
                    DataBaseSettings dbs = obj as DataBaseSettings;
                    this.Db_Name = dbs.Db_Name;
                    this.Db_Password = dbs.Db_Password;
                    this.Db_Source = dbs.Db_Source;
                    this.Db_User = dbs.Db_User;
                }
                else
                    File.Delete(path);
            }
        }
 
        /// <summary>
        /// Конструктор класса
        /// </summary>
        /// <param name="db">Экземпляр класса DataBase</param>
        public DataBaseSettings(DataBase db)
        {
            this.Db_User = db.Db_User;
            this.Db_Source = db.Db_Source;
            this.Db_Password = db.Db_Password;
            this.Db_Name = db.Db_Name;
        }
 
        /// <summary>
        /// Конструктор класса
        /// </summary>
        public DataBaseSettings()
        {
            this.Db_Name = string.Empty;
            this.Db_Password = string.Empty;
            this.Db_Source = string.Empty;
            this.Db_User = string.Empty;
        }
    }
}
В поле Db_User класса DataBase на строке "{" вылезает исключение An unhandled exception of type 'System.StackOverflowException' occurred in MySQLLib.dll. Не пойму в чем может быть проблема. Тестирую следующим кодом:
C#
1
2
3
4
5
6
7
8
9
            try
            {
                MySQLLib.DataBase db = new MySQLLib.DataBase("123", "321", "asd", "dsa");
                db.SaveSettings();
                MySQLLib.DataBase bd = new MySQLLib.DataBase();
                bd.LoadSettings();
                MessageBox.Show(bd.ConnectionString);
            }
            catch (Exception z) { MessageBox.Show(z.ToString()); }
Исключение вылетает на первой же строке:
C#
1
MySQLLib.DataBase db = new MySQLLib.DataBase("123", "321", "asd", "dsa");
Неужели нельзя хранить переменные просто в виде полей, а надо создавать будет отдельные приватные переменные и привязывать поля к ним? Ибо проблема, как мне кажется, тут.

Добавлено через 12 минут
Да, когда вывел все поля в отдельные приватные переменные и привязал все к ним - сработало.

Добавлено через 1 час 26 минут
Понял в чем причина была, банальное зацикливание.
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2011, 01:30
Ответы с готовыми решениями:

Переполнение стека при рекурсии
У меня есть рекурсионная функция. Заменить ее чем либо другим не получается. Но при выполнении ее происходит переполнение стека процесса....

Переполнение стека при рекурсии
Код: public void FindEvenlyShadedAreas(Bitmap b, Color Color_Arr1, Color Color_Arr2, Point StartPoint, int difference) ...

Переполнение
Здравствуйте! Подскажите, как сделать поведение при переполнении типа таким, как в С? То есть, например, byte b = 250 + 20; равнялось бы...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2011, 01:30
Помогаю со студенческими работами здесь

MemoryStream, переполнение памяти
Доброго времени суток, уважаемые! У меня возник вопрос следующего характера: Есть некоторый файл, сжатый через GZip (это для...

Как можно вызвать переполнение буфера
Как можно вызвать переполнение буфера в C# 1.0 с использование .net 1.x ? Знаю, что можно, но как? На всех ресурсах пишут, что возможно...

Переполнение в результате выполнения арифметической операции
При использовании типа int - ошибки нет, но некоторым переменным необходимо присвоить значения более 1000 000 000 Поэтому для...

Переполнение стека
public string XORLP4(string _lpart, string _newextentedbinarytempP4) { int xorlp4 = 0; xorlp4 =...

Переполнение стека
Проблема в следующем, есть программа, которая должна многопоточно перебирать списки сайтов, запросы реализованы следующим образом: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru