Помощь - Поиск - Пользователи - Календарь
Полная версия: Программа DAO Toolset Unicode Patch
Город Мастеров > РЕДАКТОРЫ > Dragon Age Toolset
Страницы: 1, 2
EqKeeper
DAT Unicode Patch v1.5b

Описание (Description)
Данная программа вносит изменения в базу данных DAToolset, что обеспечивает возможность хранения в ней текстовых строк в формате Юникод.
The following program changes some aspects in DAToolset database thus ensuring the capability of Unicode text storage.

Системные требования (System requirements)
- Установленный и работоспособный Dragon Age Toolset
- .NET Framework 2.0 или выше
- Installed and working Dragon Age Toolset
- .NET Framework 2.0 or above


Авторы (Staff)
Идея создания и алгоритм работы: Ice Blade
Реализация: Equilibrium Keeper
Тестирование и предложения: Leon PRO

Скачать (Download) - 13,6кб
http://www.mediafire.com/?tf182l8mub3f5ah
http://webfile.ru/4931463

Список изменений:
v1.5
- Добавлена поддержка входа на сервер требующий аутентификации
- Добавлена возможность изменять типы колонок в несколько типов (для возможности отката изменения)
- Все изменения производятся через транзакцию и откатываются в случае неудачи
- Убрана возможность создания бэкапа базы данных
v1.4
- Добавлена возможность создания бэкапа базы данных
v1.3
- Изменен алгоритма получения данных из реестра
v1.2
- Добавлена поддержка x86-систем
v1.1
- Изменено описание, название, добавлена поддержка английского (по-умолчанию)
- Способ подключения к базе данных берется из настроек Toolset'а
Leon PRO
Не забываем, что тулсет общается с БД через ф-ции, и там далеко не ntext и тем более не nvarchar.
Если с ntext-ом еще повезло (пока что) то не факт, что nvarchar заработает.

EqKeeper
Покажи какой SQL запрос отправляешь к БД для сменя типа столбца.
Хорошо бы, если бы ты там реализовал Бэкап всей изменяемой таблицы, а то, если что, тебя с в какашках моддеры утопят если их данные поплывут )
Ну и не забудь сделать обфускацию, строгую подпись, самообновление и онлайн счетчик запусков biggrin.gif

Цитата
Если все правит как надо - пытайтесь его сломать, так что бы он вас куда-нибудь послал или убил нафиг базу данных.

Легко )

UPD. 1. Ну как и думал. Именно такая ошибка и вылезла =) Почему ты решил что мой тулсет использует тот же ConnectionString что и твой ? wink3.gif
Может у меня вообще сервер на другой машине =)

Личные замечания:
  1. Дохрена длинное имя файла.
  2. В окне с ошибкой выводи полный стэк. И сделай поле копируемым. НИКТО не будет тебе перепечатывать текст ошибки. (ну разве только истенные фонаты).
  3. Тест сделай на инглише лучше.
  4. Database не "RU" а Юникодовой становится =) Т.е. мультиязычной =)
  5. Лучше не жаббер и форум а почту укажи. (ну это уже по этикету)
  6. Зачем прогрессбар - не понятно совсем. Ну совсем непонятно.
  7. Не торопись. Лучше дольше и качественно, чем быстро и некачественно =) Еще раз все обдумай. Представь типичные ситуации, начиная с той что система вообще голая.
  8. см. предыдущий пункт
EqKeeper
Цитата
Покажи какой SQL запрос отправляешь к БД для сменя типа столбца.

Код
ALTER TABLE dbo.t_StringText ALTER COLUMN Text nvarchar(max) NULL


Цитата
Хорошо бы, если бы ты там реализовал Бэкап всей изменяемой таблицы, а то, если что, тебя с в какашках моддеры утопят если их данные поплывут )

А вот это уже будет не "в одну кнопку". smile.gif
Но если удастся порушить таблицу, то конечно сделаю.

Цитата
UPD. 1. Ну как и думал. Именно такая ошибка и вылезла =)

Хммм? Какая "такая"? smile.gif

Цитата
Дохрена длинное имя файла.

Порежим! smile.gif

Цитата
В окне с ошибкой выводи полный стэк. И сделай поле копируемым. НИКТО не будет тебе перепечатывать текст ошибки. (ну разве только истенные фонаты)

Хм... кто есть полный стек? А Ctrl+C для чего? smile.gif

Цитата
Тест сделай на инглише лучше.

Тогда уж надо делать мультиязычую, ибо большинство наших модеров имеют весьма своеобразные взаимоотношения с английским. smile.gif

Цитата
Database не "RU" а Юникодовой становится =) Т.е. мультиязычной =)

Принимается.

Цитата
Лучше не жаббер и форум а почту укажи. (ну это уже по этикету)

Принимается

Цитата
Не забываем, что тулсет общается с БД через ф-ции, и там далеко не ntext и тем более не nvarchar.

На сколько я понимаю, nvarchar принимают любые функции, расчитанные на ntext. А вот наоборот - нет.
Leon PRO
Я подправил текст, пока ты печатал сообщение smile.gif
EqKeeper
Поправил, продолжаем тестить:
http://www.mediafire.com/?cv5rj7abx9dz5vf
http://webfile.ru/4904292

А я пока остальное поправлю.

---

Продолжая облагораживать софтину, выяснил. что из nvarchar в ntext он замечательно переводит. Так что, если это будет критично, можно и в ntext - теперь уже не проблема. (Хотя, если проблем с nvarchar не будет, то лучше nvarchar).

---

Супер! Попутно освою локализацию WinForms! smile.gif

---

Освоил. smile.gif Теперь это мультиязыковое чудовище... ммм... может, еще прикрутить модуль для работы с переводчиком гугла? biggrin.gif
Leon PRO
Попутно сделай ей транзакционность, сэкономишь моддерам нервные клетки и повысишь доверие к программе wink3.gif

Запустил. На вид - ничего не изменилось, ну имя проги стало короче но жутко мутное =)
Назови ее уже "DaUnicode.exe" и не мучайся муками творчества =)

Ну и при запуске "В экземпляре не задана ссылка на объект" nea.gif

P.S. Опщем как перечисленное поправишь - посмотрю опять )
EqKeeper
Продолжаю править. Ошибку он выдал, потому что у тебя в реестре нет записи... куды девал? >_>
Ладно, сейчас сделаю ручной выбор сервера, если не нашли записи в реестре и дефолтного не существует...

Увы,

DataTable dtServers = SmoApplication.EnumAvailableSqlServers(false);
foreach (DataRow row in dtServers.Rows)
{
string sqlServerName = row["Server"].ToString();
if (row["Instance"] != null && row["Instance"].ToString().Length > 0)
sqlServerName += @"\" + row["Instance"].ToString();
MessageBox.Show(sqlServerName);
}

При выполнении на моей машине выдает лишь ее имя: EK и не видит экземпляра. =\ Впрочем, как честно предупреждали мелкомягкие - ибо метод ненадежен.
Так что я сейчас (*зевает*) докручу реестр, чтобы он не падал в оборок при отсутствии ключа и к "одной кнопке", видимо, придется добавить еще и один TextBox...
kelamor
Хотел попробовать... но буду ждать финальной версии, а то в базе проект висит (жаба давит, а то вдруг чего с ней случится smile.gif)
EqKeeper
Блин, что-то я немного не туда копал... Там же лежит уже готовая строчка для соединения. И без нее редактор в любом случае не запустится! smile.gif
Правда, я пользовал SQLConnection, а она под OleDb... но эт дело десятое. Сейчас... (интересно, я сегодня спать буду?..)

---

Нашел причину твоей ошибки - богомерзки WOW6432Node. Сейчас поправлю.

---

Фссссссссссссссссё!
Тестируйте. Ну, и разумеется, всевозможные варианты убийства программы или базы с её помощью только приветствуются!

http://www.mediafire.com/?0z4rewacewkz8qs
http://www.rapidshare.ru/1689271
http://webfile.ru/4905331
http://zalil.ru/upload/29977037
Leon PRO
Цитата
Блин, что-то я немного не туда копал... Там же лежит уже готовая строчка для соединения. И без нее редактор в любом случае не запустится!

Наконец то =)
*бурные, несмолкающие аплодисменты* biggrin.gif

Цитата
Хотел попробовать... но буду ждать финальной версии, а то в базе проект висит (жаба давит, а то вдруг чего с ней случится smile.gif)

Лучше не торопитсья, да.
EqKeeper
thank_you.gif

А что касается транзакционности... А оно надо? unsure.gif
Альтер табл если работу начнет, то проведет до конца. А если не начнет, то и не изменит ничего. smile.gif

Как оно, господа? Работает? Редактор буковки понимать не разучился?
Leon PRO
Внес версионность - это гут, однако имя файла не говорит о версии, только имя архива. Даже сам файл в метаданных не указывает на ту версию, что указана на имени архива. Просто включи инкремент версии сборки при паблишинге в настройках проекта, а потом при архивировании просто указывай ее в имени архива, взяв руками из метаданных. Сам не запутаешься и пользователь не запутается. Я не предлагаю указывать версию в имени экзешника, т.к. в этом есть как + так и -
Ну и будучи перфекционистом я предложил бы еще (как сделал бы я)
- Заменить текст на кнопке на "Patch Database"
- И же, тебе будет полезнее, если ты будешь получат весь Exception через Exception.ToString() для этого, конечно, придется сменить диалоговое окно об ошибке на соответвующее.
- Всетаки сделай бэкап таблицы/столбца =) (например в новую таблицу)


Ну и о главном:
В экземпляре объекта не задана ссылка на объект.

в DATDbPatch.FormMain.button1_Click(Object sender, EventArgs e)

P.S. Не знал, что текст диалогового окна можно скопировать на Ctrl+C biggrin.gif Век живи - век учись, блин =)
EqKeeper
Цитата
Внес версионность - это гут, однако имя файла не говорит о версии, только имя архива. Даже сам файл в метаданных не указывает на ту версию, что указана на имени архива. Просто включи инкремент версии сборки при паблишинге в настройках проекта, а потом при архивировании просто указывай ее в имени архива, взяв руками из метаданных. Сам не запутаешься и пользователь не запутается. Я не предлагаю указывать версию в имени экзешника, т.к. в этом есть как + так и -

Принято.

Цитата
- Заменить текст на кнопке на "Patch Database"

Ммм... а русском: "Испортить базу данных"? smile.gif

Цитата
- И же, тебе будет полезнее, если ты будешь получат весь Exception через Exception.ToString() для этого, конечно, придется сменить диалоговое окно об ошибке на соответвующее.

На соответствующее - это нарисовать модальную форму? Или есть готовые решения?

Цитата
- Всетаки сделай бэкап таблицы/столбца =) (например в новую таблицу)

Ммм... сделать копию и оставить в базе болтаться?.. и в ридмишку добавить?

Цитата
Ну и о главном:
В экземпляре объекта не задана ссылка на объект.

в DATDbPatch.FormMain.button1_Click(Object sender, EventArgs e)

*застрелился* Слушай, глянь на строчку... Может, это я ошибся? У тебя по этому адресу в реестре есть ключик "DefaultDatabaseConnection"?

Код
"SOFTWARE\\" + (IntPtr.Size == 8 ? "Wow6432Node\\" : "") + "BioWare\\Dragon Age\\Toolset\\Environment"
Leon PRO
Нет, я сейчас на работе smile.gif
Но, допустим я типичный американский подросток, который думает, что у него стоит ДА, и что он моддер, хотя у него на самом деле чистая ОС biggrin.gif
Цитата
Или есть готовые решения?

ХЗ, можно ли вызвать стандартное диалоговое окно эксепшна программы, которое вызывает система (там внизу есть еще текстовое поле, куда она полный текст эксепшна сбрасывает. Я таким не пользовался пока что, но сам задумался сегодня (поискать - времени уже не было).
Ну на крайняк сам набросай такое из формы, кнопки, лейбла и текстбокса )

Да и еще. Сделать ресурсы внедренными никак? В идеале просто 1 экзешник чтобы получился. Кстати, программа в принципе может существовать всего в 2х вариантах - на русском и английском, бОльшее, думаю уже излишним будет - это решит вопрос с внешними ресурсами.

P.S. Можешь добавитm и мое мыло, я не гордый, но приятно biggrin.gif (Leonn СОБАКО mail ТОЧКА ru)
EqKeeper
Цитата
Но, допустим я типичный американский подросток, который думает, что у него стоит ДА, и что он моддер, хотя у него на самом деле чистая ОС

Окей, сейчас сделаю проверку и маты. smile.gif А ошибку он выдал у тебя тоже с работы ( rolleyes.gif ) или из дома? sad.gif

Цитата
ХЗ, можно ли вызвать стандартное диалоговое окно эксепшна программы, которое вызывает система (там внизу есть еще текстовое поле, куда она полный текст эксепшна сбрасывает. Я таким не пользовался пока что, но сам задумался сегодня (поискать - времени уже не было).

Да, я вот вчера тоже заинтересовался. smile.gif Сейчас покумекаю.

Цитата
Да и еще. Сделать ресурсы внедренными никак? В идеале просто 1 экзешник чтобы получился. Кстати, программа в принципе может существовать всего в 2х вариантах - на русском и английском, бОльшее, думаю уже излишним будет - это решит вопрос с внешними ресурсами.

Касательно этого сейчас попробую. smile.gif

Цитата
P.S. Можешь добавитm и мое мыло, я не гордый, но приятно biggrin.gif (Leonn СОБАКО mail ТОЧКА ru)

Запросто! smile.gif
Leon PRO
Последнюю - с работы. К слову у меня тут даже MSSQL не стоит, не то что DA crazy.gif
Вчерашнюю - из дома.
EqKeeper
Ну, вчерашняя и не должна была работать. Она свято верила, что ты сидишь под 64-битной виндой. smile.gif В эту просто проверку сейчас впаяю. smile.gif

Итак следующая версия, научившаяся следить за тем есть ли на машине юзера база тулсета. Тестим, мучаем.
Сообщения пока оставил теми же, времени немного не хватает.
http://www.mediafire.com/?3napjmi1n2330hm
http://www.rapidshare.ru/1689860
http://webfile.ru/4906893
http://zalil.ru/29979347
Leon PRO
Тестил дома на машине, на которой есть все.

---------------------------
Dragon Age Toolset Database Patch - Error!
---------------------------
Во время работы произошла ошибка!

Если вы не знаете почему это произошло или уверены, что вашей вины в этом нет, пожалуйста свяжитесь со мной!



email: equilibriumkeeper@yandex.ru

jabber: equilibriumkeeper@jabber.ru

forum: http://www.city-of-masters.ru/forums/index.php?showforum=116



В сообщении укажите нижеследующую информацию (вы можете скопировать ее нажав Ctrl+C):



[DBNETLIB][ConnectionOpen (Connect()).]SQL-сервер не существует, или отсутствует доступ.



в System.Data.OleDb.OleDbConnectionInternal..ctor(Ol
eDbConnectionString constr, OleDbConnection connection)

в System.Data.OleDb.OleDbConnectionFactory.CreateCon
nection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)

в System.Data.ProviderBase.DbConnectionFactory.Creat
eNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)

в System.Data.ProviderBase.DbConnectionFactory.GetCo
nnection(DbConnection owningConnection)

в System.Data.ProviderBase.DbConnectionClosed.OpenCo
nnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)

в System.Data.OleDb.OleDbConnection.Open()

в DATDbPatch.FormMain.button1_Click(Object sender, EventArgs e)
---------------------------
ОК
---------------------------
EqKeeper
Как проснусь посмотрю... unsure.gif
Lex
можно под программу сделать отдельную тему (и соотв. ссылаться на нее, а не на раздел). И перенести туда посты отсюда, посвященные именно программе, а не процессу дрессировки тулсета.
Leon PRO
Можно =)
Кто перенесет-то ? =)
Lex
Сделал. Пост автора программы первый, поэтому он может поменять название темы на нужное.
Leon PRO
Кипер, актуальные версии, полагаю, лучше помещать в первый пост и обновлять его.
Хорошо бы вести там чендж лог от версии к версии.
virus_found
Не приложил исходники - подозрительно. А вдруг там вирусня закодирована? Я бы даже не притронулся к экзешке на вашем месте.
Leon PRO
Гы, вирус - жжошь =)

Ну, я рефлектором проверил сначала ph34r.gif biggrin.gif
А на случай случайного заражения - стоит антивирь.

С одной стороны ты прав.
С другой стороны, даже если закодить деструктивные действия, кто разберется во всем коде, если там около несколько сотен строк? wink3.gif
К тому же, где гарантия, что будут исходники именно этого экзешника =)
В третьих - давать или не давать исходники - дело сугубо личное, я бы даже сказал интимное.
В четвертых, качая с ваулта или сошиал биовэр - никто почему-то не спрашивает доказательства и исходники smile.gif
EqKeeper
Цитата(Lex @ Nov 17 2010, 12:51) *
Сделал. Пост автора программы первый, поэтому он может поменять название темы на нужное.

Увы, не могу. smile.gif
Griffon: DAO Toolset Unicode Patch. захотите сменить, исправим. smile.gif

Цитата(Leon PRO @ Nov 17 2010, 14:07) *
Кипер, актуальные версии, полагаю, лучше помещать в первый пост и обновлять его.
Хорошо бы вести там чендж лог от версии к версии.

Сделано.

Цитата(virus_found @ Nov 17 2010, 14:20) *
Не приложил исходники - подозрительно. А вдруг там вирусня закодирована? Я бы даже не притронулся к экзешке на вашем месте.

До релиза исходники не дам. nea.gif После релиза - если хватит времени, чтобы привести код в божеский вид. Мне стыдно. unsure.gif

Leon PRO
Сейчас прикручу к софтине нормлаьный лог - посмотрим хоть на чем падает (вернее, что она пытается подсунуть в ConnectionString). smile.gif

P.S. Да, кнопку поправил, а чтобы запаковать ресурсы в exe'шник, я так понял, нужен .NET не ниже 3.5.

Leon (и все желающие поучаствовать в тестировании):
http://www.mediafire.com/?4uxzefncncqqcg7
Версия с логом. Что пишет после определения строки подключения?
(Чувствую, придется все-таки вернуться к первому варианту и использовать только путь к базе, а не всю строчку... но поживем увидим smile.gif)
Leon PRO
В консоли:
Во время работы произошла ошибка...

В диалоге:
---------------------------
Dragon Age Toolset Database Patch - Error!
---------------------------
Во время работы произошла ошибка!

Если вы не знаете почему это произошло или уверены, что вашей вины в этом нет, пожалуйста свяжитесь со мной!



email: equilibriumkeeper@yandex.ru

jabber: equilibriumkeeper@jabber.ru

forum: http://www.city-of-masters.ru/forums/index.php?showforum=116



В сообщении укажите нижеследующую информацию (вы можете скопировать ее нажав Ctrl+C):



[DBNETLIB][ConnectionOpen (Connect()).]SQL-сервер не существует, или отсутствует доступ.



в System.Data.OleDb.OleDbConnectionInternal..ctor(Ol
eDbConnectionString constr, OleDbConnection connection)

в System.Data.OleDb.OleDbConnectionFactory.CreateCon
nection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)

в System.Data.ProviderBase.DbConnectionFactory.Creat
eNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)

в System.Data.ProviderBase.DbConnectionFactory.GetCo
nnection(DbConnection owningConnection)

в System.Data.ProviderBase.DbConnectionClosed.OpenCo
nnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)

в System.Data.OleDb.OleDbConnection.Open()

в DATDbPatch.FormMain.button1_Click(Object sender, EventArgs e)
---------------------------
ОК
---------------------------

И оставь в покое уже мою ветку LOCAL_MASHINE crazy.gif , бери значение из CURRENT_USER и не DefaultDatabaseConnection а DatabaseConnection.
EqKeeper
Вот злодей!
Проблема в том, что у меня она как раз в локал машин, а куррент юзере ее нет. =\ (Ибо я умный (и скромный) и когда писал просмотрел весь реестр - других записей не обнаружилось)
И есть только дефолт... проверять все, в порядке приоритетов?
Leon PRO
Я бы проверял все в порядке нормальных шансов.
У большинства юзеров, думаю, в CURRENT_USER.
Но, я сам модифицировал connection string через тулсет-конфигуратор. Выглядит он у меня вот так:
Код
Provider=SQLNCLI10.1;Integrated Security=SSPI;Persist Security Info=False;User ID="";Initial Catalog=WorkDB2;Data Source=.\SQLEXPRESS;Auto Translate=False;Initial File Name="";Server SPN=""


Может если не модифицировать, то записи в Каррент Юзер нет?
Вобщем, тебе надо перепробовать и учесть все варианты. В идеале, программа должна последовательно перебирать все известные варианты от частного (Юзер-кастом настройки) и до общего (дефолтной настройки), пока не произойдет соединение.

Как контрольнй выстрел - если ничего не подошло - сделать поиск по реестру и автоматическая отсылка найденных веток с вхождениями"Bioware" и "DragonAge" со всем их содержимым с разрешения пользователя, например через POST запрос на к.л. хостинг который будет их принимать.

(ггг... вот так, с виду маленькие пятиминутные программы превращаются в месячную нервотрепку для их разработчиков crazy.gif )

UPD. Заодно можно искать и отсылать все картинки из скрытых папок с вхожденяими "mygirl" "private" "homeporn" в именах rolleyes.gif biggrin.gif
EqKeeper
Цитата
UPD. Заодно можно искать и отсылать все картинки из скрытых папок с вхожденяими "mygirl" "private" "homeporn" в именах rolleyes.gif biggrin.gif

Принято!

Касательно остального - поковыряюсь.
К выводу пришел лишь к одному - конекшен стринг юзать нельзя. Ибо у тебя вот он пользует SQL. По дефолту - OleDb. А в C# все-таки нужна конкретика. Придется, видимо. парсить строчку и извлекать из нее имя базы, логин/пароль... возможно, еще что-нибудь... Боги, храните регэкспы! smile.gif

В общем, весело. smile.gif Сделаю. smile.gif
Leon PRO
Ну как это нельзя ???? Только для этого надо использовать OleDB провайдера (скорее всего они его и юзают)
В примере ниже я использовал полный копипаст своей строки, только заэкранировал кавычки:

Код
using System.Data.OleDb;

string connString = "Provider=SQLNCLI10.1;Integrated Security=SSPI;Persist Security Info=False;User ID=\"\";Initial Catalog=WorkDB2;Data Source=.\\SQLEXPRESS;Auto Translate=False;Initial File Name=\"\";Server SPN=\"\"";

OleDbConnection oleC = new OleDbConnection(connString);
oleC.Open();


ву а ля, коннекшн открыт =)

Если же ты хочешь использовать SqlClient провайдера, то все чуть сложнее, но тоже без всяких заморочек на регэкспы.
Вот я набросал за 35 минут минимально необходимый быдлокод, учитывающий встроенную аутентификацию и аутентификацию по логину-паролю.

Код
using System.Collections.Generic;
using System.Data.SqlClient;

namespace DBConnector
{
    class Program
    {
        const string connString = "Provider=SQLNCLI10.1;Integrated Security=SSPI;Persist Security Info=False;User ID=\"\";Initial Catalog=WorkDB2;Data Source=.\\SQLEXPRESS;Auto Translate=False;Initial File Name=\"\";Server SPN=\"\"";

        const string IntegratedSequrity = "Integrated Security";
        const string UserId = "User ID";
        const string Passwd = "Password";
        const string InitCatalog = "Initial Catalog";
        const string DataSource = "Data Source";

        static void Main(string[] args)
        {
            string[] stringArr = connString.Split(';');

            Dictionary<string, string> connPairs = new Dictionary<string, string>();

            foreach (string str in stringArr)
            {
                string[] tmpStr = str.Split('=');
                connPairs.Add(tmpStr[0], tmpStr[1]);
            }

            SqlConnectionStringBuilder sqlConnBuilder = new SqlConnectionStringBuilder();

            if (connPairs[IntegratedSequrity] == "SSPI" || connPairs[IntegratedSequrity].ToLower() == "true")
                sqlConnBuilder.IntegratedSecurity = true;
            else
                sqlConnBuilder.IntegratedSecurity = false;

            if (sqlConnBuilder.IntegratedSecurity == false)
            {
                sqlConnBuilder.UserID = connPairs[UserId];
                sqlConnBuilder.Password = connPairs[Passwd];
            }

            sqlConnBuilder.InitialCatalog = connPairs[InitCatalog];
            sqlConnBuilder.DataSource = connPairs[DataSource];

            SqlConnection conn = new SqlConnection(sqlConnBuilder.ConnectionString);
            conn.Open();
        }
    }
}


UPD. 1 Судя по тексту ошибки ты и так используешь OleDB. (Судя по коду - действительно используешь) Все должно открываться crazy.gif .
EqKeeper
Какое изысканное извращение. smile.gif)) Блин, а я так не умею. unsure.gif Спасибо за код. smile.gif Регулярки мне нравятся больше, но в познователньых целях - очень даже! smile.gif

Не обращай внимания, я просто почему-то решил, что SQLNCLI10.1 используется для SqlConnection и OleDb его не понимает. С базами работаю 2ой раз в жизни, так что какие провайдеры с какими классами работают не знаю. Обычно вбиваю в msdn и беру один из примеров. smile.gif Тогда проблем нет! smile.gif Просто переберу все ключики реестра.

---

Вау! Почитал про Dictonary - влюбился! smile.gif) Мои любимые универсальные хэши из Руби возвращаются! smile.gif А я мучался с Хэштабл. smile.gif))

---

Хмм... а где в тулсете настраивается подключение? Я что-то в Опциях не нашел, а других настроек не увидел... >_>

---

Кстати, а мелкомягкие злодеи напрочь убили возможность получить доступ к корню реестра? Тоесть, пользуясь их классом Registry плясать можно только от конкретного раздела, но не от корня?

---

Готово! Тестируйте. smile.gif
Leon PRO
В папке с тулсетом есть экзешник конфигуратора.
И там же, обрати внимание есть галка "use default configuration" - возможно именно она и определяет что тулсетина начинает ломиться в Локал Мэшин -> дефолт Коннекшн.

Цитата
Готово! Тестируйте. smile.gif

А ты протестировал вход в БД по логину-паролю через строку подключения ? wink3.gif
EqKeeper
Я строку подключения и беру. smile.gif Целиком. Ибо как ты сам и говорил - юзаю OleDb, следовательно вручную смысла не имеет. Так что, если работает тулсет, должен работать и патч. Не работает тулсет - идут лесом с ошибкой. Или ты имеешь ввиду сделать отдельный ругателньый экзепшен на случай, если строчку получили, а приконектиться не смогли?

Насчет экзешника - пасиб. Сейчас и проверю. smile.gif
Leon PRO
Цитата
Я строку подключения и беру. smile.gif Целиком.

А ты уверен, что пасс в ней пишется? Может тулсетина каждый раз при таком типе аутентификации запрашивает его?

Это не респектабельный подход. Разработчик (хороший разработчик) в первую очередь должен сам всё тестировать. А "баги" это случайно неучтенные моменты, но не непроверенные способы работы программы.

Ну и по делу biggrin.gif

---------------------------
Dragon Age Toolset Database Patch - Error!
---------------------------
Во время работы произошла ошибка!

Если вы не знаете почему это произошло или уверены, что вашей вины в этом нет, пожалуйста свяжитесь со мной!



email: equilibriumkeeper@yandex.ru

jabber: equilibriumkeeper@jabber.ru

forum: http://www.city-of-masters.ru/forums/index...c=6214&st=0



В сообщении укажите нижеследующую информацию (вы можете скопировать ее нажав Ctrl+C):



System.ArgumentException: Недопустимое значение ключа "integrated security".

в System.Data.Common.DbConnectionOptions.ConvertValu
eToIntegratedSecurityInternal(String stringValue)

в System.Data.Common.DbConnectionOptions.ConvertValu
eToIntegratedSecurity()

в System.Data.Common.DbConnectionOptions.get_HasBlan
kPassword()

в System.Data.Common.DBDataPermission..ctor(DbConnec
tionOptions connectionOptions)

в System.Data.OleDb.OleDbPermission..ctor(OleDbConne
ctionString constr)

в System.Data.OleDb.OleDbConnectionString.CreatePerm
issionSet()

в System.Data.Common.DbConnectionOptions.DemandPermi
ssion()

в System.Data.OleDb.OleDbConnection.PermissionDemand
()

в System.Data.OleDb.OleDbConnectionFactory.Permissio
nDemand(DbConnection outerConnection)

в System.Data.ProviderBase.DbConnectionClosed.OpenCo
nnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)

в System.Data.OleDb.OleDbConnection.Open()

в DATDbPatch.FormMain.button1_Click(Object sender, EventArgs e)
---------------------------
ОК
---------------------------

В итоге я сказал тулсету, чтобы снова соединялся по SSPI. В результате - алилуйя! Прога соединилась.
Однако вот это расстраивает меня больше чем все остальное вместе взятое. И теперь хочу спросить. У меня в БД теперь каша или все ок?


---------------------------
Dragon Age Toolset Database Patch - Error!
---------------------------
Во время работы произошла ошибка!

Если вы не знаете почему это произошло или уверены, что вашей вины в этом нет, пожалуйста свяжитесь со мной!



email: equilibriumkeeper@yandex.ru

jabber: equilibriumkeeper@jabber.ru

forum: http://www.city-of-masters.ru/forums/index...c=6214&st=0



В сообщении укажите нижеследующую информацию (вы можете скопировать ее нажав Ctrl+C):



System.Data.OleDb.OleDbException: Query timeout expired

в System.Data.OleDb.OleDbCommand.ExecuteReaderIntern
al(CommandBehavior behavior, String method)

в System.Data.OleDb.OleDbCommand.ExecuteNonQuery()

в DATDbPatch.FormMain.button1_Click(Object sender, EventArgs e)
---------------------------
ОК
---------------------------

UPD Прикрути лучше на время разработки лог нормальный, чтобы компактно текст писался. Банальным Exception.ToString() выводи.
EqKeeper
Блин, Леон, ты хоть под теги это безобразие прячь и лишнее убивай. smile.gif А то я уж сам запутался - что у тебя получилось, а что нет.

Каши там нет. Если она обвалилась, то просто обвалилась не внеся никаких изменений (во всяком случае, теоретически).

---

Это и есть тот самый Exeption.ToString() wink3.gif

---

Провис он на таймауте... весело... Сейчас увеличу дефолтный. Заодно родилась еще одна страшная мысля - а что если сервер упадет во время работы... Нда... Все-таки надо бэкапить оригинальную таблицу. Причем дважды. И во второй раз изменять уже ее, а после ставить на место оригинальной...
Leon PRO
Короче, по SSPI соединяется, по Login password - нет.
даже если и соединяется - базу не патчит, рушится в середине работы. И нет гарантии что не превращает данные в таблице в кашу. Вообще, судя по тому как у меня заработал винчестер во время трансформации - такое ощущение, что он там как минимум многомегабайтную базу разворачивал =D
Длилось сие действие секунд 15 а потом ошибка.

Ты у себя то проверял ?
Не надо столько действий, я уже писал - используй транзакции.
Но бэкап - это обязательно. Глупо подвергать чужие данные риску. да и во-вторых ты даешь пользователю шанс откатить изменения. МОжет ему не подойдет совсем наш метод.

Еще правильнее - почитать про то, как вообще база это делает. Может она сама делает эту операцию через транзакцию.

Цитата
Блин, Леон, ты хоть под теги это безобразие прячь и лишнее убивай.

Я думал об этом еще когда первый раз увидел, но, потом прикинул, что раз автор не хочет сделать нормальный вывод для копипаста, то мне париться и чистить логи тем более лень unsure.gif
EqKeeper
Лентяй! smile.gif

Автор хочет, чтобы софтина работала. а потом уж о дизайне думать. smile.gif Естественно у себя проверял - все на ура в любой тип переходит за 8 секунд.

---

Почапал читать.
Leon PRO
Цитата
а потом уж о дизайне думать
biggrin.gif
Ну так сделай толковый вывод!
EqKeeper
Уговорил:


---

Пока я докурочиваю софтину, подскажи - какого дьявола текст в TextBox'е автоматически выделяется при создании формы? Я так понял, это из-за того, что выставлено свойство Read Only...
Leon PRO
ХЗ. Не сталкивался.
EqKeeper
Тэкс, появилась еще одна проблема. На этот раз с бэкапом, а вернее с его восстановлением.
На таблице висит FOREIGN KEY. И вопрос в связи с этим лишь один: что делать? Во-первых, нужно ли что-нибудь делать при копировании таблицы? Я это делаю так:
Код
SELECT * INTO dbo.t_StringText_backup FROM dbo.t_StringText

Годится?

Ну, и теперь собственно возврат бэкапа. Хотел я вначале дропнуть оригинальную таблицу, и точно также создать на ее месте новую... однако не получилось, выдал исключение с FOREIGN KEY. Как уже писал, SQL для меня - темный лес. Так что нужен совет, как быть в подобной ситуации.

---

А я пока транзакцию прикручу.

---

Прикрутил... о, нарисую ка я еще и метод-расширение на будущее, чтобы все делать транзакциями. smile.gif

---

Изыскания продолжу уже завтра. Пока могу предположить, что твое предположение (пардон за тавтологию) насчет пароля было верно. Думается мне, что если юзер поставит галочку "сохранять пароль", то можно будет использовать и эту строчку. Если нет - придется задать дополнительный вопрос о пароле. Завтра проверю. Если не сложно - подскажите как добавить в базу пользователя с паролем (а то у меня безпарольная. smile.gif)

---

Вчера руки так и не дошли - сейчас наконец сел дописать. Скоро (надеюсь) выложу. smile.gif
EqKeeper
---

Тэкс, с паролем разобрался, но не тестировал. Причины две и каждая рождает вопрос, оба из которых я уже задавал:
1) Как создать запороленную учетку для стандартного биоваревского сервера (чтобы проверить парольный доступ).
2) Как изменить стандартную строку подключения? Дело в том, что ConfigureToolset.exe исправно гененирует ее и даже дает нажать кнопку "Готово", однако никаких изменений в реестр не вносит и, если повторно его запустить, там снова будет стоять галочка стандартного подключения. Возможно, проблема в х64-винде. Возможно, в чем-то еще?

Идеи? Отсутствие ответа на 2ой вопрос исключает необходимость в 1ом. smile.gif

Ну и третий вопрос, который я уже также задавал: что делать с FOREIGN KEY (см.пост выше). Как только исправлю (или не исправлю) последний и протестирую (или не протестирую) первые - залью новую версию. smile.gif
Leon PRO
Сори, я пас. У меня просто нет времени, чтобы ещё и в этом ковыряться.

Но на:
Вопрос 1 банально можно найти ответы в гугле.
Вопрос 2 когда-то я тоже мудохался с этим, но после всех патчей это как то само начало работать (возможно причина и не в этом), как - я так и не понял, но изменения начали запоминаться. В любом случае строку подключения моно вписать руками.
Вопрос 3, наверное тебе откроет более углубленное изучение MS SQL или попробуй очень точно сформулировать и описать его на к.л. тематическом форуме.
EqKeeper
Ну, увы, тоже работа, так что с углубленным изучением SQL придется обождать. rolleyes.gif
Тогда - ждите. Как разберусь - выложу. Думаю, к выходным. Но тут без гарантий.

По п.2 - бессмысленно, мне интересно - где он создаст ее сам в 64-разрядной системе. Что-то мне сомнительно, что там, куда я его сейчас направил. Но не суть - поэкспериментирую. Главное - если у тебя работает, значит и я настрою. smile.gif

---

Видимо, придется обойтись только транзакцией, ибо для бэкапа нужно сделать копию данной таблицы и всех связанных таблиц. А при восстановлении - уничтожить все связанные таблицы, восстановить из бэкапа, заново создать связи. ИМХО, после такого даже в удачном случае юзеры повесятся. Но как бы не пришлось делать бэкап от бэкапа. smile.gif Второй способом - BACKUP / RESTORE но он настолько громоздкий и медленный и, опять же, затрагивает в той или иной мере большую часть базы, что использовать его совершенно не хочется. В общем, работа идет через транзакцию, что обеспечит отказоустойчивость. А если человек жмяхает кнопку, значит он понимает для чего это делает и готов к последствиям. Добавлю кнопку обратного изменения типов (скорее всего даже сделаю просто выпадающий список с возможными вариантами.
EqKeeper
Версия 1.5. Тестируйте. rolleyes.gif
Leon PRO
пишу в том порядке в каком увидел:

- Для среднестатистического конечного пользователя стал слишком сложный интерфейс. Если очень хочется предоставить расширенные настройки по конвертированию, лучше их "спрятать" в адвансед опшнс, но не дать простым пользователям шанса их "случайно" заюзать.
- Все известные эксепшны (например, если БД недоступна) не содержащие какой-либо полезной информации для разработчика (например строку подключения) в финале можно заменить в итоге на юзер-френдли сообщения. Такие большие простынки, как правило пугают их.
- Я тыкаю на кнопки и... ничего не вижу =) только кроме того, что открывается следующая кнопка. Это немного противоестественно, ИМХО.
- Я, простой американский бой. Вбиваю от балды пароль в поле пароля и на этапе "проверка соединения" получаю ошибку, причем не обрабатываемую приложением, а в стандартном виндовском окне (текст ошибки ниже). Логично, ведь моя база без пароля, а с Integrated Sequrity.
- После того, как база пропатчилась я решил не экспериментировать и не нажимать "Исправление базы" снова. Предоставляю это сделать тебе =D. Но намек ты понял, думаю crazy.gif
- Если тебе захотят написать письмо или скопировать линк форума при ошибке - заипутся, ибо не не выделяемые строки. Если ты используешь свою форму - поставь на все ссылки LinkLabel а в обработчик - что-то типа "System.Diagnostics.Process.Start("http://www.yandex.ru");
"

База норм пропатчилась. good.gif
Слава богу, наконец то. biggrin.gif

Лог ошибки по проверке соединения:

Подробная информация об использовании оперативной
(JIT) отладки вместо данного диалогового
окна содержится в конце этого сообщения.

************** Текст исключения **************
System.ArgumentException: Формат строки инициализации не соответствует спецификации, начиная с индекса 190.
в System.Data.Common.DbConnectionOptions.GetKeyValue
Pair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue)
в System.Data.Common.DbConnectionOptions.ParseIntern
al(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey)
в System.Data.Common.DbConnectionOptions..ctor(Strin
g connectionString, Hashtable synonyms, Boolean useOdbcRules)
в System.Data.OleDb.OleDbConnectionString..ctor(Stri
ng connectionString, Boolean validate)
в System.Data.OleDb.OleDbConnectionFactory.CreateCon
nectionOptions(String connectionString, DbConnectionOptions previous)
в System.Data.ProviderBase.DbConnectionFactory.GetCo
nnectionPoolGroup(String connectionString, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)
в System.Data.OleDb.OleDbConnection.ConnectionString
_Set(String value)
в System.Data.OleDb.OleDbConnection.set_ConnectionSt
ring(String value)
в DATUnicode.FormMain.button2_Click(Object sender, EventArgs e)
в System.Windows.Forms.Control.OnClick(EventArgs e)
в System.Windows.Forms.Button.OnClick(EventArgs e)
в System.Windows.Forms.Button.OnMouseUp(MouseEventAr
gs mevent)
в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ButtonBase.WndProc(Message& m)
в System.Windows.Forms.Button.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.O
nMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.W
ndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
EqKeeper
Цитата(Leon PRO @ Nov 28 2010, 18:46) *
пишу в том порядке в каком увидел:

- Для среднестатистического конечного пользователя стал слишком сложный интерфейс. Если очень хочется предоставить расширенные настройки по конвертированию, лучше их "спрятать" в адвансед опшнс, но не дать простым пользователям шанса их "случайно" заюзать.

Ммм... подумаю над этим. smile.gif
Цитата(Leon PRO @ Nov 28 2010, 18:46) *
- Все известные эксепшны (например, если БД недоступна) не содержащие какой-либо полезной информации для разработчика (например строку подключения) в финале можно заменить в итоге на юзер-френдли сообщения. Такие большие простынки, как правило пугают их.

Да, тут только лень. Со временем обработаю все.
Цитата(Leon PRO @ Nov 28 2010, 18:46) *
- Я тыкаю на кнопки и... ничего не вижу =) только кроме того, что открывается следующая кнопка. Это немного противоестественно, ИМХО.

Хочется мессаджа "All Done"? smile.gif Сделаем (хотя сам такие не люблю).
Цитата(Leon PRO @ Nov 28 2010, 18:46) *
- Я, простой американский бой. Вбиваю от балды пароль в поле пароля и на этапе "проверка соединения" получаю ошибку, причем не обрабатываемую приложением, а в стандартном виндовском окне (текст ошибки ниже). Логично, ведь моя база без пароля, а с Integrated Sequrity.

Странно, я же хотел прикрутить проверку... наверное забыл... окей, поправлю. unsure.gif
Цитата(Leon PRO @ Nov 28 2010, 18:46) *
- После того, как база пропатчилась я решил не экспериментировать и не нажимать "Исправление базы" снова. Предоставляю это сделать тебе =D. Но намек ты понял, думаю crazy.gif

А вот зря не пробовал - я вот регулярно и десятка три к ряду. smile.gif Умные OleDbCommand просто не выполняется, видя, что колонки уже приведены к нужным типам.
Цитата(Leon PRO @ Nov 28 2010, 18:46) *
- Если тебе захотят написать письмо или скопировать линк форума при ошибке - заипутся, ибо не не выделяемые строки. Если ты используешь свою форму - поставь на все ссылки LinkLabel а в обработчик - что-то типа "System.Diagnostics.Process.Start("http://www.yandex.ru");

Хм, а вот тут можно поподробнее? scratch_one-s_head.gif
Цитата
База норм пропатчилась. good.gif
Слава богу, наконец то. biggrin.gif

yahoo.gif
Leon PRO
Цитата
Хм, а вот тут можно поподробнее? scratch_one-s_head.gif

О чем поподробнее, конкретно =)
kelamor
Так что, можно пробовать? biggrin.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2025 Invision Power Services, Inc.