Страница 1 из 1
Некоторы особености ADO.NET
Добавлено:
28 окт 2009, 21:10
Vladislav_133
Это ответы на конкретные вопросы, конкретных студентов. Поэтому пишу конспективно.
Часть первая.
Соединение с сервером.
Привожу пример очищенного рабочего кода.
SqlConnection con = new SqlConnection();
…
con.ConnectionString = "server=" + server.Trim() + ";database=kotel;User Id=" + user.Trim() + ";Password=" + password.Trim() + ";";
Здесь server, user, password – переменные, содержащие имя сервер, имя пользователя и пароль пользователя.
…
con.Open();
открыли соединение, теперь можно использовать
переменную con как идентификатор соединения.
Но эта технолгия относится только к SQL серверу.
Если вы собираетесь использовать более универальный механизм,
То вместо класса SqlConnection, используете например класс OdbcConnection, или OleDbConnection.
В конце соединение закрываем.
Con.Close() .
Re: Некоторы особености ADO.NET
Добавлено:
28 окт 2009, 21:24
Vladislav_133
Часть вторая.
Выполнение хранимых процедур без параметров.
Процедура не содержит парааметров и выдает данные (таблицу).
SqlCommand sc = new SqlCommand();
sc.Connection = con;
sc.CommandType = CommandType.StoredProcedure;
sc.CommandText = "get_spr_obl"; //имя процедуры
SqlDataReader dr; // класс, получающий результат выполнения.
dr = sc.ExecuteReader(); // выполнили и получили данные.
Теперь как их вытащить в прорамму
//цикл идет по всему набору данных
while (dr.Read())
{
//содержатся данные массиве (курсоре) dr
//например dr[“name”] – доступ к столбцу name и т.д.
}
Далее обязательно закрываем курсор
dr.close().
Если вы хотите использовать более общую технологию, то меняем , например,
SqCommand на OdbcCommann, SqlDataReader на OdbcDataReader.
Если процедура ничего не возвращает, то вместо ExecuteReader используем
ExecuteNonQuery.
Re: Некоторы особености ADO.NET
Добавлено:
28 окт 2009, 21:32
Vladislav_133
Часть третья.
Параметры.
SqlParameter p1 = new SqlParameter();
p1.ParameterName = "@id"; //имя пааметра в хранимой процедуре
p1.SqlDbType = SqlDbType.BigInt; //тип
p1.Direction = ParameterDirection.Input; //параметр - значение
p1.Value = значение
sc.Parameters.Add(p1); //параметр добавили к запросу
нужен второй параметр, проделываем тоже самое еще раз и т.д.
Опять же, при переходе к другой технооги меняем соответствующие классы.
Ну, пока все.
Задаайте конретные вопрос.
Re: Некоторы особености ADO.NET
Добавлено:
08 дек 2009, 13:53
БорАл
Как глобально открыть КОННЕКТ к базе данных из клиента на GUI, чтобы он работал постоянно.
В частности в C#. Приходится каждый раз при том или ином событии на форме присоединяться к базе и отсоединяться. То есть открыл соединение, провел какие-либо манипуляции с данными, закрыл.
Может быть можно сделать это глобально, чтоыб не бегать "туда-сюда". Подскажите.
Re: Некоторы особености ADO.NET
Добавлено:
08 дек 2009, 15:14
xdsl
Не моя область, конечно, но разве GUI-программа на дотнете не имеет события, которое возникает сразу после старта программа (создания приложения, создания окна и т.п.) и еще одного события - непосредственно перед завершением программы? Или, по старинке, нельзя внести участок кода первым и соответственно последним операторами в функцию main()?
Re: Некоторы особености ADO.NET
Добавлено:
08 дек 2009, 23:40
Vladislav_133
БорАл писал(а):Как глобально открыть КОННЕКТ к базе данных из клиента на GUI, чтобы он работал постоянно.
В частности в C#. Приходится каждый раз при том или ином событии на форме присоединяться к базе и отсоединяться. То есть открыл соединение, провел какие-либо манипуляции с данными, закрыл.
Может быть можно сделать это глобально, чтоыб не бегать "туда-сюда". Подскажите.
Вы не точно сформулировали вопрос. Я вам скажу, что на самом деле вы спрашиваете. Как в C# создать глобальную переменную?
Так ведь? Вы просто хотите хранить идентификатор соединения.
Можно использовать статический класс, например. Или статическую переменную, в каком-либо классе.
Я думаю, что xdsl тоже понял вопрос. А события, конечно, есть.
Re: Некоторы особености ADO.NET
Добавлено:
09 дек 2009, 09:49
xdsl
Vladislav_133 писал(а):Я думаю, что xdsl тоже понял вопрос.
В голову даже не пришло, что причина - в незнании способов определения глобальных переменных. Вопрос я понял следующим образом:
"Пишу код в обработчиках нажатий на кнопки. В каждом обработчике 1.открываю соединение, 2.работаю с базой, 3.закрываю соединение. Устал от тормозов соединений-разъединений, хочу п.1 вынести в начало программы, п.3 - в конец программы".
Дотнет - не мой профиль, поэтому вместо ответа задал встречный вопрос типа
"В других системах это делается так-то и так-то, есть-ли такие возможности в дотнет?"
Re: Некоторы особености ADO.NET
Добавлено:
17 дек 2009, 11:37
БорАл
Здравствуйте!
Возникла такая проблема. Нужно из дочерней формы передать значения в основную.
Один раз получилось, форма выдала нам сообщение, что объект описан неправильно. А в дочерней форме необходимые данные используются нормально без проблем.
Re: Некоторы особености ADO.NET
Добавлено:
17 дек 2009, 11:39
БорАл
Еще точнее, чнужно сделать так, чтобы можно было обмениваться данными между формами
Re: Некоторы особености ADO.NET
Добавлено:
17 дек 2009, 12:31
xdsl
Последние два вопроса относятся ADO.NET? или к .NET? Или ни к тому, ни к другому отношения не имеют? Вообщем, код в студию.
Re: Некоторы особености ADO.NET
Добавлено:
18 дек 2009, 10:20
Vladislav_133
Есть два основных подхода. Красивый и не красивый. Красивый - при создании формы ей передается объект или объекты, точнее указатели на них. Не красивый - через глобальные переменные. Первый подход, конечно, предпочтительней.
Вчера мы с ребятами этот вопрос обсуждали. Остановились на красивом подходе.
Re: Некоторы особености ADO.NET
Добавлено:
02 апр 2010, 09:50
БорАл
Доброго времени суток.
Есть ли в .Net в таком объекте как TreeView механизированные методы добавления строк?
В listbox есть свойства - DataSource, DisplayMember и ValueMamber. С помощью которых можно автоматизировать добавление строк из базы данных.
Есть ли что-то подобное в TreeView?
Re: Некоторы особености ADO.NET
Добавлено:
05 апр 2010, 11:15
БорАл
Таки не нашел, однако
Что такое DataReader? Можно ли в считывателе обращаться к элементам, как к двумерному массиву?
Re: Некоторы особености ADO.NET
Добавлено:
05 апр 2010, 11:51
Vladislav_133
Разберусь - сообщу. Пока не было времени.
Re: Некоторы особености ADO.NET
Добавлено:
05 апр 2010, 14:44
Vladislav_133
Чего-то никак ваши вопросы не пойму до конца.
Для того, чтобы добавить узел используется стандартная комбинация
TreeNode newNode = new TreeNode("Text for new node");
treeView1.SelectedNode.Nodes.Add(newNode);
добавка узла внутрь выбранного.
Что вам здесь не ясно. Если вы хотите все оптом добавлять, то тогда скажите, какова, по-вашему должна быть
исходная структура. Ведь она должна иметь деревообразную форму. Разве не так? В любом случае проще
добавлять так, как я указал.
datareader - странно, а разве вы им не пользуетесь постоянно. Это объект для получения данных из некоторого источника. Вы получаете эти данные путем выполнения запроса.
Если я не ответил на ваши вопросы, постарайтесь их сформулировать более ясно.
Ага пропустил дополнительный вопрос, насчет двумерного массива. Попытаюсь разобраться.
Re: Некоторы особености ADO.NET
Добавлено:
05 апр 2010, 17:13
Vladislav_133
Насчет двумерного массива вы как-то меня запутали. Речь ведь идет о курсоре, т.е. таблице, а таблица может быть предствлен двумерным массивом.
Re: Некоторы особености ADO.NET
Добавлено:
10 апр 2010, 10:01
БорАл
Будет ли работать следующий подход:
While(rdr1.Read())
{
......
while(rdr2.Read())
{
........
while(rdr3.Read())
{
............
}
}
}
?
Re: Некоторы особености ADO.NET
Добавлено:
10 апр 2010, 12:56
Vladislav_133
А попробоать нельзя?
Я вам се время пытаюсь втолковать одну истину - программирование это эксперимент. Что пользы, если я скажу, что на первый взгляд все должно работать. Ну для пущей важности возьмите три соединения, хотя,конечно, это уже перебор. И одного достаточно. Я уловил, с какой проблемой вы мучаетесь и уже советовал, что логичнее было бы заполнять уровень ветки, при щелчке по ней. На мой взгляд это способ наиболее логичный, когда работаешь с деревьями.
1. Это быстро, так как не требует заполнения сразу всего дерева.
2. Это эффективно, так как данные будут меняться динамически. Ведь речь идет о работе в многопользоательском режиме.