|
Прелести c#
|
|||
---|---|---|---|
#18+
Подозревая закидывание меня чем нибудь тяжелым, не смог все-таки удержаться и не создать тему. Если это возможно, прошу понять то, что я хотел донести и узнать. Писал на Delphi под БД. Несколько раз, судьба пыталась меня свести с Visual Studio и C# в частности. Проект создан и работает, но почему так все сложно у Вас? В целом разобрался, но родилось несколько все равно вопросов 1. Почему, во всех книгах по ado.net, в 99%, рекомендуют рвать коннект? Т.е. создавать его в какой-нибудь приватной процедуре (или методе вызова события чего-либо) что-то сделать и разорвать. Переубедите пожалуйста, я тут совсем не понял прикола. У меня некоторые программы конектятся к удаленым серверам и время на конект может занимать определенные время.. если на каждый чих будет попытка соединения это просто жесть какая-то. Еще, есть такое понятие как лицензии и сессии, как в таком случае отсекать сие и следить за этим? Т.е. правило - кто первый встал , того и тапки, ни кто не отменял... а тут типа вроде и запустил прогу (надел тапки) но не факт, что твой следующий запрос к базе будет успешным... новый коннект , а ты уже оказывается устарел и лицухи тебе не хватило.. 2. Почему так все сложно с с# казалось -бы уже c обычными вещами, как все то-же соединение и работа с БД? В Delphi, кинул компонент коннекта, компонент Query и DataSource... всё!!!!!!!!!!!!! Тут какие-то танцы с бубном. Есть разница, Query1.FieldByName("id").AsInteger или (datasourceRole.Current as DataRowView).Row["id"].ToString() ? и то еще пока в стринговой а не интежеровской айдишник получил... И это то, что еще в Delphi я просто кинул на форму Query, а с версии 2008 VisualStudio ваще не нашел компонент аналогичных ...... Накидывается тьма хрени всякой, потом что-то правится даже, типа , о чудо , можно и запрос создать... Я пришел к выводу, что в рил-тайме я лучше создам и хоть контроль какой-то возымею и смогу даже запрос впихнуть. 3. Все работает, насоздавал всяких классов для более или менее адекватной работы с БД... Кидаю дэвэекспресовский грид на форму... опять засада.. отрисовка несколько секунд... Повторный запуск формы, все ок.. Почему первый раз так долго? Такое впечатление, что подгрузка с харда сначала а потом с ОЗУ работает... Исполняемый не растет.. Это обрадовало но не надолго.. лучшем вырос чем такая лажа... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 14:47 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
kill_zdm, 1. http://msdn.microsoft.com/ru-ru/library/8xx3tyca.aspx 2. Вы уверены, что Row["id"] не int? попробуйте преобразовать сразу к int. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 15:04 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
Lelouch, 2. Я к тому, что в дэлфях я сразу говорил ToInteger, а тут и так строка длиная, а еще и приводить ее (Всё это делается.. вот такой я сволочью побуду, почему все не так просто :) ) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 15:12 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
Lelouch, 1. Как создать на весь проект один коннект это я скриейтил... я не понял почему во всех книжках советуют его рвать... наводит на мысли... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 15:32 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
kill_zdm, 1. При чем тут 1 коннект на весь проект? Вы про пул соединений прочитали? Когда вы вызываете Close(), соединение не закрывается, а помещается в пул, и может быть использовано повторно. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 15:49 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
Lelouch, Вот как, ок, не догнал, спс за инфу ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 17:09 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
kill_zdm, Во-первых есть пул соединений, во-вторых никто не заставляет рвать соединение. Я допустим работаю "по старинке", как в Delphi - соединение открыто постоянно. Да и в общем-то работа в C# с БД ничуть не хуже чем в делфи. К слову я сам не так давно слез с делфи и возвращаться пока желания нет. Нужно просто почитать про ADO.NET и все сразу станет понятным. Насчет девчачьего грида, то не знаю в чем у Вас проблема, у себя такого поведения за ним не замечал ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 19:12 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
Thor234, ok, может не повезло просто с девками(vs 2012) почитал я про ado.net иначе и рвануться толком и не удалось-бы. А скажи пожалуйста, чем лично тебя привлек с#? (надеюсь ни чего, что на ты?) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 22:23 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
kill_zdmThor234, ok, может не повезло просто с девками(vs 2012) почитал я про ado.net иначе и рвануться толком и не удалось-бы. А скажи пожалуйста, чем лично тебя привлек с#? (надеюсь ни чего, что на ты?) Провакационный вопрос не хочу разводить холивар, как собственно и поливать какашками делфи, потому, что я люблю этот язык и любил на протяжении последних 10 лет, а он любил меня Просто поработав пару недель на C# почему-то не захотелось запускать делфи, а сейчас меня увлекло изучение C# ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 22:43 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
Есть конечно некоторые вещи которые меня просто дико раздражают в ADO.NET, например №1 в моем топе это невозможность параллельных транзакций в FB net provider и вытекающей отсюда невозможности разделенных читающих и пишущих транзакций, за другие провайдеры не скажу ибо не пробовал. Но все решается допиливанием исходников провайдера, благо они в открытом доступе. Плюс не особо нравится использование TableAdapter'ов, но обойтись можно и без них, решение получается более гибкое, но и менее быстрое в разработке, много "тынцев мышем". ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 22:51 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
Вопрос на сообразительность: что общего между C#, Delphi и Андерсом Хейлсбергом? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 22:54 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
skyANAВопрос на сообразительность: что общего между C#, Delphi и Андерсом Хейлсбергом? :) Ответ знает любой школьник ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2012, 23:01 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
Не стоит искать Delphi там, где его нет. Лично я перешел на с# после того, как увидел возможности, которых не было в Delphi. Бизнес-объекты, а не адаптеры и прочие мелкие и неудобные подробности - это совсем другая история. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 00:47 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
SeVaНе стоит искать Delphi там, где его нет. Лично я перешел на с# после того, как увидел возможности, которых не было в Delphi. Бизнес-объекты, а не адаптеры и прочие мелкие и неудобные подробности - это совсем другая история. Бизнес-объекты это конечно хорошо, даже и не спорю, но есть мелкие задачи для которых ОРМ это как с пушки по воробьям ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 02:37 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
И в мыслях не было провокаций. Просто хотелось услышать не книжное, а личное мнение, что привлекло. А на счет литературы, что не попадалось, все в основном разжовывание одних и тех-же элементарных вещий и в основном под консоль. Посоветуйте литературку по ado.net с упором на windows приложения, где более конкретно описаны приемы передачи запросов, а не тупость обращения к одной таблице через tableadapter, работа с datagrid и другими контролами. на сколько понял до версии 2008, был аналогичный делфийскому компоненту query,зачем его убрали? Пишу с мобилы сейчас, потом брошу, как-я понял работу с бд на с, буду благодарен за ваши мнения и критику. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 08:02 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
kill_zdm2. Почему так все сложно с с# казалось -бы уже c обычными вещами, как все то-же соединение и работа с БД? В Delphi, кинул компонент коннекта, компонент Query и DataSource... всё!!!!!!!!!!!!! Тут какие-то танцы с бубном. Есть разница, Query1.FieldByName("id").AsInteger или (datasourceRole.Current as DataRowView).Row["id"].ToString() ? и то еще пока в стринговой а не интежеровской айдишник получил... И это то, что еще в Delphi я просто кинул на форму Query, а с версии 2008 VisualStudio ваще не нашел компонент аналогичных ...... Накидывается тьма хрени всякой, потом что-то правится даже, типа , о чудо , можно и запрос создать...Типичный пример покорёженного Delphi мышления. Не обижайся. :-) kill_zdmЯ пришел к выводу, что в рил-тайме я лучше создам и хоть контроль какой-то возымею и смогу даже запрос впихнуть.Вывод правильный. Не нужно ничего "кидать на форму". Дизайнер форм предназначен не для работы с данными, а для компоновки контролов на форме. Тут автоматизация этого процесса достигается кодогенерацией. Посмотри T4 Text Template ради интереса. Так же кодогенерация присутствует в дизайнерах типизированного DataSet, EF, Linq2Sql и прочих. зы: DataSet не самый удачный выбор для работы с данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 08:45 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
Алексей К, ни каких обид конечно. Может и искаженные понятия от дэлфи, но... Все-таки в дизайн-тайме, без нагромождений (как в делфи), как-то удобнее сразу законнектится, посмотреть результат в dbGrid, например, настроить поля и т.д.... В c#, пришел к выводу, что так виртуально представлю как будет выглядеть и какие поля иметь DataGridView и собственно добавил ему полей и настроил не видя еще результата. Как уже сказал выше, книжки как-то не цепанули, которые попались. Поэтому по наитию все :) Скажите, вот так я адекватно поступил? Создал класс, назвал его Connect (База данных SQL Server, еще где-то надыбал класс работы с INI) /// <summary> /// Процедура соединения с БД /// </summary> public void ConnectDB() { IniFile ini = new IniFile(Application.StartupPath + "\\set.ini"); string ServerDest = "Data Source=" + ini.IniReadValue("Назначение", "Сервер") + ";Initial Catalog=" + ini.IniReadValue("Назначение", "База данных") + ";Integrated Security=True"; dbDest = new SqlConnection(ServerDest); dbDest.Open(); } По сколько привычка обращаться не к позиции dbgrid-а, а все-таки к Query, как FieldByName("").Value (извините я еще не могу отделаться от дэлфевых аналогий, надеюсь Вы понимаете о чем я, пришел к выводу, что надо использовать BindingSource) В общем на скорую руку сделал такой метод (не судите строго, все еще на этапе познания :) ) /// <summary> /// Процедура выборки или исполнения запросов /// </summary> /// <param name="sql">Передаваемый запрос</param> public void ExecQuery(string sql) { ds = new BindingSource(); da = new SqlDataAdapter(sql, dbDest); DataSet1 = new DataSet(); da.Fill(DataSet1); ds.DataSource = DataSet1; //ds.DataMember = DataSet1.Tables[0].TableName; } Передаю эту законнектенную переменную там дальше (про пулы вот позже на мысли Вы меня навели). В DataGridView добавил поле, назовем его Name и собственно выполняю запрос private void FRoles_Load(object sender, EventArgs e) { datasourceRole = new BindingSource(); adapterRole = new SqlDataAdapter("select * from roles", dbRole.dbDest); datasetRole = new DataSet(); dataGridView1.AutoGenerateColumns = false; dataGridView1.DataSource = datasourceRole; ShowRoles(); } А про FieldByName это я к тому, что, например при удалении, определить айдшиник текущей позиции надо, что удалять будем... (datasourceRole.Current as DataRowView).Row["id"].ToString() в общем как-то так наколбасил, криткуйте ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 09:18 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
kill_zdmВсе-таки в дизайн-тайме, без нагромождений (как в делфи), как-то удобнее сразу законнектится, посмотреть результат в dbGrid, например, настроить поля и т.д.... В c#, пришел к выводу, что так виртуально представлю как будет выглядеть и какие поля иметь DataGridView и собственно добавил ему полей и настроил не видя еще результата.Нет ничего невозможного. BindingSource позволяет получить метаданные объекта в дизайнтайме. Правда в DataGridView полно граблей с редактированием колонок в дизайнере... В общем, лучше писать под WPF. :-) А в целом архитектура примерно такая. Мутится слой доступа к данным: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Потом в форме пишется что-то вроде: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 11:17 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
kill_zdm1. Почему, во всех книгах по ado.net, в 99%, рекомендуют рвать коннект? Это не рвать коннект, а высвобождать соединение. На случай, если у вас серверное приложение и очень много пользователей. Если простая двухзвенка, можете использовать одну коннекцию и никогда в процессе работы приложения не закрывать, опять же если все как обычно в делфи делается в одном ГУИ потоке. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 12:02 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
Алексей К, Сейчас переварю... По поводу, что в дизайне и в c# можно сделать я и не оспаривал, просто нагромождение жестокое выходит. Что-то там и в конструкторе типа запроса удалось своять. Но попутно вопрос, ну допустим все-таки в дизайн-тайме, как в рил-тайме, тому, что накидал, передать запрос? Т.е. кинул DataGridView, кликнул на треугольничек -Выберите источник, выбрал, таблицы и вьюхи не выбрал, создалось что-то такое пустое... В конструкторе сделал запрос. В риле необходимо, например, делать изменение запроса (не предлагайте только фильтры пожалуйста, хочу чистый SQL), т.е. необходимо просто впихивать разные запросы... Как и куда? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 12:40 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
ЕвгенийВkill_zdm1. Почему, во всех книгах по ado.net, в 99%, рекомендуют рвать коннект? Это не рвать коннект, а высвобождать соединение. На случай, если у вас серверное приложение и очень много пользователей. Если простая двухзвенка, можете использовать одну коннекцию и никогда в процессе работы приложения не закрывать, опять же если все как обычно в делфи делается в одном ГУИ потоке. А поясните, в чем разница в словах , разорвать коннект и высвободить соединение? Честное слово не понял разницы, разрыв и в том и в том случае произойдет? На случай, если у вас серверное приложение и очень много пользователей - конечно серверное и пользователей много, как и лицензий на использование и контроль сессий (бездействий и т.д.), как раз в данном случае и необходим контроль и "НЕОБРЫВ" соединения.. В каком-нибудь приложение тет-а-тет, одни-на-один с базой, можно и рвать смело... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 12:47 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
kill_zdm, По теме есть хорошая книга: Сеппа Д. Microsoft ADO.NET. Читали? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 12:48 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
йцуке, да, с него и начал (спасибо все равно)... но как и сказал выше, там все под консоль.... для совсем начала может и хорошая вещь... но мне нужно под вин-приложения писать, все следующие далее мои хотелки... как работать с гридом и контролами, как в дизайне все делать, как передавать уже из созданого в дизайне запросы и в этом духе... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 12:53 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
У Сеппа, что касается вин-приложений.. то на уровне... обращений к одной таблицы.. кинул грид, создал коннект, указал таблицу и прям счастье наступило....... Не то. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 12:55 |
|
Прелести c#
|
|||
---|---|---|---|
#18+
kill_zdmУ Сеппа, что касается вин-приложений.. то на уровне... обращений к одной таблицы.. кинул грид, создал коннект, указал таблицу и прям счастье наступило....... Не то. Вы, наверно, про создание всего в визуальном редакторе? Можно, например, иметь в типизированном DataSet таблицы, которые не соответствуют таблицам базы, и заполнять их произвольными запросами, которые в свою очередь могут быть параметризованными, и которые можно насоздавать в визуальном редакторе. Соответственно, и в гриде отображать эту таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2012, 13:08 |
|
|
start [/forum/topic.php?fid=17&fpage=25&tid=1349971]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
100ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 194ms |
0 / 0 |