Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > подключение к удаленной базе данных sql server


Автор: RWander 11.7.2007, 13:54
Проблема в следующем: в своем приложении я использую базу данных sql server. Теперь мне необходимо, чтобы эта база находилась на каком-нибудь сервере. И каждый раз, когда необходимо обратиться к ней, необходимо установить соединение с инетом и подключиться к этой базе. Вопрос: как это сделать? И какой хостинг лучше использовать для базы данных (желательно бесплатный)?

Автор: thomas 11.7.2007, 14:04
RWander, 
А это принципиально иметь базу на удаленном сервере?
Ведь можно локально установить бесплатный MS SQLEXPRESS Server и юзать его. При этом доступ к нему круглосуточный.  smile 
Плюс ни кто чужой в базу не залезет через интернет.

Автор: RWander 11.7.2007, 14:09
да, принципиально. Моей программой ведь не только я один пользоваться буду.. а база данных должна быть одна и должна находиться на сервере, который постоянно работает.

Автор: Idsa 12.7.2007, 14:17
Цитата(RWander @  11.7.2007,  13:54 Найти цитируемый пост)
как это сделать

Купить хостинг с поддержкой SqlServer. После оплаты тебе вышлют данные для поключения: адрес SqlServer, логин и пароль.

Цитата(RWander @  11.7.2007,  13:54 Найти цитируемый пост)
И какой хостинг лучше использовать для базы данных (желательно бесплатный)

Бесплатный хостинг с SqlServer, насколько я знаю, вообще не найти, ведь сам SqlServer стоит денег (ну не будут же хостеры ставить Exspress Edititon).

Автор: RWander 12.7.2007, 14:46
Может подскажите какой хостинг лучше все использовать?

Автор: Wanderer2019 12.7.2007, 16:21
я 1gb.ru юзаю... 
правда базу MySql использую пока... 
в MS SQL надобности острой пока нет...

Автор: RWander 13.7.2007, 15:29
Цитата(Wanderer2019 @  12.7.2007,  16:21 Найти цитируемый пост)
правда базу MySql использую пока... 

А средствами C# можно получить доступ к базе MySQL? 

Автор: Idsa 13.7.2007, 15:46
Цитата(RWander @  13.7.2007,  15:29 Найти цитируемый пост)
А средствами C# можно получить доступ к базе MySQL?  

Легко smile

Скачиваешь провайдер, читаешь информацию о различиях между SqlProvider и MySqlProvider (их немного, но они есть), коннектишь сборку к своему проекту - и вперед smile

Добавлено @ 15:57
Кстати можно пойти и по другому пути: воспользоваться имеющимися в ФреймВорке более универсальными OleDb или ODBC провайдерами. Но это приведет к снижению скорости (по сравнению с предложенным выше вариантом) и отсутствию поддержки специфических возможностей MySQL (если, конечно, таковые имеются).

А вот http://dev.mysql.com/downloads/connector/net/1.0.html на бесплатный провайдер для Мускула.

Автор: Idsa 13.7.2007, 16:26
Если решишь использовать универсальный провайдер (в твоем случае, пожалуй, в этом есть некоторый смысл), лучше воспользуйся провайдером OleDb. Вот http://ftp.sas.com/techsup/download/v8papers/odbcdb.pdf, в которой сравниваются OleDb и DBC. Она хоть и старенькая, но суть отражает.

Автор: RWander 13.7.2007, 18:59
Idsa, спс! тогда лучше буду мускул использовать! smile 

Автор: Idsa 20.7.2007, 22:45
В прошлый раз я забыл указать еще один замечательный способ написания относительно независимого от источника данных кода - фабрик.

Создаем фабрику:
Код

string factory = "System.Data.SqlClient"; //Эту строку нужно хранить в ресурсах
DbProviderFactory provider = DbProviderFactories.GetFactory(factory);

Получаем connection, command и т. д.:
Код

DbConnection connection = provider.CreateConnection();
DbCommand command = provider.CreateCommand();
...


Сторонние провайдеры нужно зарегистрировать в конфигурационном файле. Подробная информация подобного рода обычно находится в провайдерском help'е.
Для использования "родных" провайдеров ничего дополнительно делать не нужно.

Сравним фабрику и OleDb: оба подхода не позволяют использовать специфичные методы (например, ExecuteReader в SqlServer), НО для стандартных операций фабрика использует более эффективные методы (методы конкретного провайдера, а не обобщенные методы OleDb).

Таким образом, используя фабрику, ты раз и навсегда избавишь себя от проблемы переписывания кода при смене источника данных (например, при смене хостинга).

Автор: RWander 21.7.2007, 17:50
а вот такой вопрос: допустим я скачал драйвер ODBC для MySQL (MySQL ODBC 3.51 Driver) и установил его. А будет ли работать моя программа на других компах, где нет этого драйвера?

Автор: Idsa 21.7.2007, 18:31
Все подключенные к проекту библиотеки (за исключением тех, что в GAC'е) должны распространяться вместе с программой.

Автор: RWander 21.7.2007, 18:35
да я не подключал никаких библиотек, просто скачать этот драйвер и установил его

Автор: Idsa 21.7.2007, 21:59
Цитата(RWander @  21.7.2007,  18:35 Найти цитируемый пост)
да я не подключал никаких библиотек, просто скачать этот драйвер и установил его

Я пошел по http://dev.mysql.com/downloads/connector/odbc/3.51.html, которую ты мне любезно предоставил smile в лично переписке... и обнаружил, что эти драйверы не предназначены для .NET.

Выше я приводил ссылку на родной мускуловский драйвер под .NET. Правда, я не обратил внимания, что дал ссылку на устаревший драйвер (под .NET 1.1). Вот http://dev.mysql.com/downloads/connector/net/5.0.html на последний драйвер.

Предположим, что ты скачал и установил "Windows Source and Binaries (ZIP)" (первый в списке). Затем в Solution Explorer в своем проекте щелкаешь правой кнопкой на Reference -> AddReference -> переходишь на вкладку browse -> выбираешь C:\Program Files\MySQL\MySQL Connector Net 5.0.7\Binaries\.NET 2.0 (начало пути - C:\Program Files\MySQL - у тебя может быть другим; это папка, в которую установился драйвер) -> щелкаешь 2 раза на файле MySql.Data.dll.
Затем в cs файле добавляешь using MySql.Data.MySqlClient.

Все, провайдер готов к использованию.

P. S. Не забудь заглянуть в Help, поставляемый с провайдером.

Автор: RWander 21.7.2007, 22:18
Idsa, огромное спасибо!! провайдер установил smile
 
только все-таки будет работать моя прога на других компах, где провайдер не установлен?

Цитата(Idsa @  21.7.2007,  21:59 Найти цитируемый пост)
 эти драйверы не предназначены для .NET.

странно.. у меня с этим драйвером все работает smile

Автор: Idsa 21.7.2007, 22:23
Цитата(RWander @  21.7.2007,  22:18 Найти цитируемый пост)
странно.. у меня с этим драйвером все работает

С каким этим? С первым? Как у тебя "все работало", если ты сам сказал, что даже в Reference его не добавлял... Нипанятна.
В любом случае вышеуказанный провайдер - лучший для MySQL.

Цитата(RWander @  21.7.2007,  22:18 Найти цитируемый пост)
только все-таки будет работать моя прога на других компах, где провайдер не установлен?

Конечно, будет. Только программу нужно распространять вместе с dll'кой провайдера (если зайдешь в папку bin/debug своего проекта, то увидишь, что dll'ка уже там).

Автор: RWander 21.7.2007, 22:35
Цитата(Idsa @  21.7.2007,  22:23 Найти цитируемый пост)
С каким этим? С первым? Как у тебя "все работало", если ты сам сказал, что даже в Reference его не добавлял... Нипанятна.

я просто его установил и все, а затем в строке соединения ConnectionString  просто прописал:
Код

ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; ..и т.д.;

и все заработало smile


Цитата(Idsa @  21.7.2007,  22:23 Найти цитируемый пост)
В любом случае вышеуказанный провайдер - лучший для MySQL.

тогда буду его испоьзовать)


Цитата(Idsa @  21.7.2007,  22:23 Найти цитируемый пост)
если зайдешь в папку bin/debug своего проекта, то увидишь, что dll'ка уже там

странно.. все сделал как вы сказали, но dll  не появилась в bin/debug

Автор: Idsa 21.7.2007, 22:52
Цитата(RWander @  21.7.2007,  22:35 Найти цитируемый пост)
странно.. все сделал как вы сказали, но dll  не появилась в bin/debug

Точно! При установке MySql.Data.dll заносится в GAC, поэтому студия не размещает копию файла в bin/debug при добавлении Reference. Для того чтобы скопировать эту dll в bin/debug (именно так можно добиться работы на компьютерах без установленного провайдера), раскрываем папочку Reference -> щелкаем левой кнопкой мыши на MySql.Data -> в окне Properties устанавливаем Copy Local = true -> билдим. Теперь в bin/debug хранится копия этой библиотеки.

Автор: RWander 21.7.2007, 23:04
все получилось!
+1 smile
PS а что такое GAC?

Автор: Idsa 21.7.2007, 23:28
Цитата(RWander @  21.7.2007,  23:04 Найти цитируемый пост)
а что такое GAC?

Коротко - кэш сборок, подробнее - гугл, поиск по форуму или создание новой темы.

Автор: mr.DUDA 22.7.2007, 12:30
Модератор: Пожалуйста, один топик - один вопрос.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)