Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Экземпляр класса и переменные в этом классе 
V
    Опции темы
Laprado
Дата 28.12.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 24.5.2006
Где: Firefox

Репутация: нет
Всего: нет



Есть метод Main в котором создается экземпляр класса. В классе находится метод и переменная для подключения к БД. Пытаюсь подключиться к БД через переменную экземпляра класса в методе main.
Подключение проходит нормально, только при удаленном вызове метода Access вылазит исключение, что перем conn == null, хотя она определена была через метод Main. 
Я так понял, при создании экземпляра класса, переменные которые я использую через экземпляр - это одно, а что есть в самом классе - это другое. Как тут быть? 

Код

static void Main(string[] args)
        {
            ServiceHost host = null;
            Core cr = null; // экземпляр класса Core

             if (host != null)
            {
                Console.WriteLine("---- Соединение с БД...");
                cr = new Core();
                cr.Connect(); // метод коннекта к БД

                if (cr.conn != null) // переменная соединения
                    Console.WriteLine("---- ОК : " + cr.conn.ConnectionString.ToString());
                else
                {
                    host.Close();
                    host = null;
                    Console.WriteLine("---! Сервер остановлен");
                }
            }
 

Core.cs

Код

class Core : ICore
    {
        private static Object EnterObj = new Object();
        ICallback callback = null;
        bool ok = false;


        string DBstr = "server=localhost; user id=root; password=111; database=wcf; pooling=false";
        public MySqlConnection conn = null;


        public void Connect()
        {
            try
            {
                if (conn != null)
                {
                    conn.Close();
                    conn = null;
                }
                else
                {
                    conn = new MySqlConnection(DBstr);
                    conn.Open();
                }
            }
            catch (Exception exp)
            {
                Console.WriteLine("void Connect ::: " + exp.Message);
                conn = null;
            }
        }


 public void Access(string name, string password)
        {
            string qwery = String.Format("SELECT * FROM users WHERE User = '{0}' and Password = '{1}'", name, password);
            MySqlCommand cm = new MySqlCommand(qwery, conn);
            MySqlDataReader dr = null;

            lock (EnterObj)
            {
                try
                {
                    dr = cm.ExecuteReader();

                    while (dr.Read())
                    {
                        if ((string.Compare(name, dr.GetString(1), true) == 0) && (password.Equals(dr.GetString(2))))
                        {
                            ok = true;
                        }
                    }

                    dr.Close();
                }
                catch (Exception exp)
                {
                    Console.WriteLine("void Access ::: "+exp.Message); // Ругается, что перем conn == null
                }
            }

            callback = OperationContext.Current.GetCallbackChannel<ICallback>();
            callback.Success(ok);
        }

--------------------
PM MAIL   Вверх
ivashkanet
Дата 28.12.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Laprado @  28.12.2006,  10:43 Найти цитируемый пост)
Я так понял, при создании экземпляра класса, переменные которые я использую через экземпляр - это одно, а что есть в самом классе - это другое. Как тут быть? 

Ничего не понятно  smile 

Но, по идее, все должно быть нормально, 
при условии, что ты используешь тот же экземпляр класса и в дальнейшем
Цитата(Laprado @  28.12.2006,  10:43 Найти цитируемый пост)
cr = new Core();

Если нет, то посмотри в сторону 
Код

public static MySqlConnection conn = null;


Тогда у тя будет один экзэмпляр  conn на все элементы класса  smile 
PM MAIL WWW ICQ   Вверх
Laprado
Дата 28.12.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 24.5.2006
Где: Firefox

Репутация: нет
Всего: нет



conn используется в разных классах, в данном случае в main и Core. Если  я в main создам экземпляр класса Core и подключусь через нее к БД, то в main все будет нормально, а в Core она так и останется cо значением null. Надо, чтобы она во всех классах приняла одно и тоже значение.
Если написать 
Код

public static MySqlConnection conn = null;
 
то, получается, в других классах conn использовать нельзя.
--------------------
PM MAIL   Вверх
ivashkanet
Дата 28.12.2006, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Laprado @  28.12.2006,  11:38 Найти цитируемый пост)
то, получается, в других классах conn использовать нельзя.

Почему? Можно smile 

Но во первых: обращаться к нему нужно Core.conn
а во вторых: я бы снизил уровень доступа к этому полю до protected 
Цитата(Laprado @  28.12.2006,  11:38 Найти цитируемый пост)
Надо, чтобы она во всех классах приняла одно и тоже значение.

Тогда только static  smile 
PM MAIL WWW ICQ   Вверх
Laprado
Дата 28.12.2006, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 24.5.2006
Где: Firefox

Репутация: нет
Всего: нет



Цитата(ivashkanet @ 28.12.2006,  12:41)
обращаться к нему нужно Core.conn

Не знал, спасибо! Теперь все работает! smile

P.S. занес Вас в свой "черный" список, кому plus дать, после набора 100 постов  smile 
--------------------
PM MAIL   Вверх
ivashkanet
Дата 28.12.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Laprado @  28.12.2006,  11:55 Найти цитируемый пост)
Не знал

Статический член общий для всех, поэтому относиться к классу, а не к конкретному элементу.
Цитата(Laprado @  28.12.2006,  11:55 Найти цитируемый пост)
спасибо

Заходи еще  smile 
Цитата(Laprado @  28.12.2006,  11:55 Найти цитируемый пост)
Теперь все работает!

Неплохо бы пометить тему решенной
Цитата(Laprado @  28.12.2006,  11:55 Найти цитируемый пост)
 Вас 

НАС????  smile  smile  smile 
PM MAIL WWW ICQ   Вверх
Laprado
Дата 28.12.2006, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 24.5.2006
Где: Firefox

Репутация: нет
Всего: нет



Цитата(ivashkanet @ 28.12.2006,  13:00)
НАС????  smile  smile  smile

Ваз smile Уже несколько человег, время тратят, помогают, а плюз не стоит, не хорошо   smile 
--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.