Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
35 / 3 / 2
Регистрация: 17.03.2014
Сообщений: 191
1

Как передать данные из переменной в методе, переменной в классе

10.05.2015, 22:02. Показов 2479. Ответов 21
Метки нет (Все метки)

Всем привет!
Нужно значение переменной connecting передать connectionString.
C#
1
2
3
4
5
6
7
8
9
10
11
class DAL
    {
        
        // строка соединения
 
        string connectionString;
        
       public void connectstring(string connect)
       {
           string connecting = string.Format(@"Data Source={0};Initial Catalog=DATABASE_ParkiNN;Integrated Security=True",connect);
}
Спасибо)!
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.05.2015, 22:02
Ответы с готовыми решениями:

как передать значение переменной которую я вводил в одном классе в другой класс (ввожу я в консоле)
class Registracia { public void Sakas() { Console.Write("Вес...

Как значение переменной передать другой переменной?
Добрый день! подскажите мне с ява-кодом, код моего ява скрипта на жейкверти //отображает...

Как передать данные в функцию в другом *.cpp НЕ глобальной переменной и не аргументами?
Собственно, сабж. Объясню. Есть у меня прога со списком серверов типа "сервер:порт". Выбирается...

Как в методе класса осуществить вывод переменной
По идее нужно чтобы вывело 11, а выводит 0. В чем ошибка понять не могу. #include <iostream>...

21
Эксперт .NET
4959 / 3392 / 1423
Регистрация: 09.05.2015
Сообщений: 8,294
10.05.2015, 22:07 2
C#
1
connectionString = connecting;
или убрав лишнюю переменную
C#
1
connectionString = string.Format(@"Data Source={0};Initial Catalog=DATABASE_ParkiNN;Integrated Security=True",connect);
0
35 / 3 / 2
Регистрация: 17.03.2014
Сообщений: 191
11.05.2015, 00:33  [ТС] 3
Спасибо! Ну я и тупой...
Цитата Сообщение от Someone007 Посмотреть сообщение
или убрав лишнюю переменную
не могу, так как она используется в множестве других методов, в вот до connectionString = connecting я не додумался. Бред!Так легко.

Добавлено через 10 минут
не бред
Цитата Сообщение от Someone007 Посмотреть сообщение
connectionString = connecting;
тоже не работает
у нас ведь в методе только ссылка, в переменную string connectionString; ничего не предается из метода. Она пустая.
0
Эксперт .NET
4959 / 3392 / 1423
Регистрация: 09.05.2015
Сообщений: 8,294
11.05.2015, 00:47 4
Проверьте в отладчике, все должно работать, либо вы что-то не так делаете.

C#
1
connectionString = connecting;
должно быть в методе connectstring после присвоения переменной connecting значения.
0
35 / 3 / 2
Регистрация: 17.03.2014
Сообщений: 191
11.05.2015, 01:06  [ТС] 5
Он предает значения параметра только connectionString в методе.
переменной connectionString в классе значение нет, то есть оно = ""
Я это проверил .
Просто из другого метода в этом классе написал
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class DAL
    {
        
        // строка соединения
 
string connectionString;
      
       public void  connectstring(string connect)
       {
            string connecting = string.Format(@"Data Source={0};Initial Catalog=DATABASE_ParkiNN;Integrated Security=True",connect);
           connectionString = connecting;
       }
        /***************Сотрудники****************/
        public ArrayList GetAllSotrudniki()
        {
          MessageBox.Show(connectionString,"Ошибка"); // и вот тут пустое окно.
         }
0
1139 / 731 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
11.05.2015, 02:27 6
connectstring() точно вызывается перед GetAllSotrudniki()?
0
114 / 115 / 52
Регистрация: 19.12.2014
Сообщений: 612
11.05.2015, 08:55 7
Михаил_04,
Цитата Сообщение от Михаил_04 Посмотреть сообщение
C#
1
2
3
4
public ArrayList GetAllSotrudniki()
* * * * {
* * * * * MessageBox.Show(connectionString,"Ошибка"); // и вот тут пустое окно.
* * * * *}
Не совсем понятно, зачем вам для вывода сообщения об ошибке использовать класс ArrayList? Да и который ничего не возвращает?
0
141 / 117 / 26
Регистрация: 07.12.2014
Сообщений: 371
11.05.2015, 09:36 8
Михаил_04, в смысле только переменной connectionString в методе?Вы вообще себе представляете как хранятся переменные в .Net?)Она глобальна на уровне класса.Посмотрите в дебаггере какое значение получает connecting.Это единственное место в том коде, который видно, откуда может придти значение пустой строки в connectionString.Либо вы GetAllSotrudniki()(транслит в коде... ) вызываете раньше чем connectsstring

Добавлено через 7 минут
Михаил_04, И ещё вы там написали, что не можете убрать connecting т.к. она используется в других методах.Это как?Она локальна.Где и как вы вообще даже теоретически хотите её использовать?)
0
114 / 115 / 52
Регистрация: 19.12.2014
Сообщений: 612
11.05.2015, 09:42 9
Vigelforts, но в классе то она глобальна, я так понимаю у него несколько методов в классе)
0
35 / 3 / 2
Регистрация: 17.03.2014
Сообщений: 191
11.05.2015, 09:49  [ТС] 10
lokilo,это не весь код метода. arraylist используется для того чтобы в него записать результат запроса к БД.
Vigelforts, connecting получает строку которой он равен с пареметром.connectionString в connectstring равен connecting. Все это я проверял. Но когда я вызывают getaalsortudnik()i, connectingString равен "" (то есть там пусто) . connectstring вызывается самым первым.В maine, в конструкторе прописано открытие формы где в connectstring передается textbox.text уже только после этого открывается главная форма.
0
114 / 115 / 52
Регистрация: 19.12.2014
Сообщений: 612
11.05.2015, 09:58 11
Михаил_04, так, а теперь по порядку точки остановки делали? с момента загрузки формы, потом смотреть какая строка входит в метод
C#
1
public void  connectstring(string connect)
то есть, что получилось здесь connect, если тут все хорошо то ставим точку остановки уже в методе
C#
1
public ArrayList GetAllSotrudniki()
на
C#
1
MessageBox.Show(connectionString,"Ошибка");
и смотрим, что сюда приходит
0
35 / 3 / 2
Регистрация: 17.03.2014
Сообщений: 191
11.05.2015, 09:58  [ТС] 12
Vigelforts, я написал что немогу убрать connectionString, а не connecting. Там написанной что connectionString это строка подключения, она используется в множестве других методов.
0
114 / 115 / 52
Регистрация: 19.12.2014
Сообщений: 612
11.05.2015, 10:01 13
Михаил_04, и еще нужно бы больше кода, чтобы увидеть где у вас может быть ошибка, полных два ваших метода где это передается и как вы их в последующем вызываете. А так можно только гадать, что у вас там может быть написано
0
35 / 3 / 2
Регистрация: 17.03.2014
Сообщений: 191
11.05.2015, 10:05  [ТС] 14
lokilo,в connect приходит то что я отправил. Перемменная connectionString в методе connectstrin равна connecting. В меседжбох передаётся пустая строка.
Пора в огород, сори. Потом все выложу.
0
114 / 115 / 52
Регистрация: 19.12.2014
Сообщений: 612
11.05.2015, 10:17 15
Михаил_04, может вы вызываете где то методы, которые очищают вашу строку?
0
35 / 3 / 2
Регистрация: 17.03.2014
Сообщений: 191
11.05.2015, 16:47  [ТС] 16
Главная форма.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
namespace ParkNN_BASE
{
    public partial class MainForm : Form
    {
        NameBD namebd = new NameBD();
        DAL dal = new DAL();
        public MainForm()
        {
            if (namebd.ShowDialog() == DialogResult.OK) //*точка* - переходит в форму NameBD
            {
                dal.ShowConnectionString();//*Точка* - вызывает метод.Переходит в DAL.
                InitializeComponent();
                dgw_WorkPeople.DataSource = dal.GetAllSotrudniki();
                dgw_Park.DataSource = dal.GetAllPark();
                SettingsDVG_cows();
            }
            else
                MessageBox.Show("Ошибка");     
        }
    }
}
**********************************************************
Форма NameBD
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
namespace ParkNN_BASE
{
    public partial class NameBD : Form
    {
        DAL dal = new DAL();
        public NameBD()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            dal.connectstring(textBox1.Text);//*точка* - отправляет то что ввел.Переходит в DAl.
            this.DialogResult = DialogResult.OK; //*точка* - отдает в MainForm ОК. Переходит в MainForm.
        }
    }
}
**********************************************************
Класс DAL
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace ParkNN_BASE
{
    class DAL
    {       
        public void  connectstring(string connect) //*точка* - принимает что отправил верно.
       {
            string connecting = string.Format(@"Data Source={0};Initial Catalog=DATABASE_ParkiNN;Integrated Security=True",connect);//*точка* - все верно.
           connectionString = connecting; //*точка* - connecting правильный, в  connectionString пока null.
           MessageBox.Show(connectionString); //*точка* - connectionString стал равным connecting. Переходит  в NameBD.
       }
        
      // строка соединения
        string connectionString;
 
        public void ShowConnectionString()
        {
            MessageBox.Show(connectionString); //*Точка* - connectionString почему то  = null, и все предыдущие connectionString тоже становятся null.
        }
   }
}
0
.NET C#,ASP.NET MVC
Эксперт .NET
590 / 501 / 225
Регистрация: 16.10.2010
Сообщений: 1,902
11.05.2015, 17:05 17
У вас два совершенно разных обекта класса "DAL". Метод присвоения строки вы вызываете в одном обьекте (обьявленном в NameBD) а функцию вывода строки вызываете в другом обьекте (обьявленном в MainForm, в котором строка все еще пустая!).

Для ДАННОГО случая подошел бы паттерн синглтон, но не понимаю зачем для вас так извращаться.

Почему нельзя засунуть инициализацю connectionString в конструктор?

C#
1
2
3
4
5
6
7
8
9
class DAL
    {
       private string _connectionString;
        
       public DAL(string connect)
       {
            _connectionString = string.Format(@"Data Source={0};Initial Catalog=DATABASE_ParkiNN;Integrated Security=True",connect);
       }
}
И вызывайте его как положено
C#
1
DAL dal = new DAL("blabla")
0
35 / 3 / 2
Регистрация: 17.03.2014
Сообщений: 191
11.05.2015, 17:26  [ТС] 18
Мне это понадобилось чтоб заменять имя компьютера в строке подключения к базам данных.
То есть в классе DAL у меня полно методов с запросами которым нужна строка подключения "connectionString".
Вот один из методов.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public  ArrayList GetAllSotrudniki()
        {         
            ArrayList AllSonrudniki = new ArrayList();
            using (SqlConnection connect = new SqlConnection(connectionString)) //как мне сюда её вызвать?
            {
                SqlCommand command = new SqlCommand("select  ФизЛица.ФИО, Должность.Название, Оклад.Оклад, Парки.Название, Сотрудники.ID_Парка, Сотрудники.ID_Сотрудника, Сотрудники.ID_ФизЛица,ФизЛица.Телефон,ФизЛица.Адрес  from  ФизЛица, Должность, Оклад, Сотрудники, Парки where  ФизЛица.ID_ФизЛица = Сотрудники.ID_ФизЛица and Должность.ID_Должности = Сотрудники.ID_Должность and Оклад.ID_Сотрудника = Сотрудники.ID_Сотрудника and Сотрудники.ID_Парка = Парки.ID_парка", connect);
                try
                {
                    connect.Open();
                    SqlDataReader dr = command.ExecuteReader();
                    if (dr.HasRows)
                        foreach (DbDataRecord result in dr)
                            AllSonrudniki.Add(result);
                }
                catch
                {
                    
                    MessageBox.Show("Ошибка в Запросе - 1", "Ошибка");
                }
            }
            return AllSonrudniki;
        }
0
.NET C#,ASP.NET MVC
Эксперт .NET
590 / 501 / 225
Регистрация: 16.10.2010
Сообщений: 1,902
11.05.2015, 17:30 19
Лучший ответ Сообщение было отмечено Михаил_04 как решение

Решение

Прочитайте внимательно мое сообщение выше! Либо присваевайте строку в конструкторе и правильно обьявляйте обьект, либо каждый раз вызывайте метод void connectstring(..) {...}, либо используйте синглтон.
1
35 / 3 / 2
Регистрация: 17.03.2014
Сообщений: 191
11.05.2015, 18:42  [ТС] 20
Спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2015, 18:42

Как при вкл флажка изменить значение переменной, использующейся в другом методе
Задумка такая. Есть элемент checkBox. Хочу чтоб при включении флажка, изменялось значение...

Указатель в управляемом классе: как обратиться к переменной
Возникла дурацкая ситуация с указателем на класс std::string внутри управляемого класса public...

Как получить доступ к переменной находящейся в одном методе из другого метода в пределах одного класса
Привет всем! Очередной вопрос новичка, допустим, у меня есть метод 1, в котором назначена...

Как записать и получать значение переменной в другом классе
Добрый день. Имеется форма авторизации (с подключением к удаленной БД mysql), после ввода верного...

Как объявить класс с переменной String^ в другом классе?
Доброго времени суток, уважаемые участники форума! Я работаю в Visual C++ 2008 Express, Windows...

Как задать значение, переменной, находящейся в классе из формы?
Нужно, чтобы переменная принимала значения трекбара, который находится на форме, но увы постоянно...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.