Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Город Мастеров _ Dragon Age Toolset _ Программа DAO Toolset Unicode Patch

Автор: EqKeeper Nov 15 2010, 17:44

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
- http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5&displayLang=ru или выше
- Installed and working Dragon Age Toolset
- http://www.microsoft.com/downloads/en/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5&displaylang=en 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 Nov 15 2010, 17:46

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

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

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

Легко )

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

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

Автор: EqKeeper Nov 15 2010, 18:06

Цитата
Покажи какой 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 Nov 15 2010, 18:38

Я подправил текст, пока ты печатал сообщение smile.gif

Автор: EqKeeper Nov 15 2010, 20:08

Поправил, продолжаем тестить:
http://www.mediafire.com/?cv5rj7abx9dz5vf
http://webfile.ru/4904292

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

---

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

---

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

---

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

Автор: Leon PRO Nov 15 2010, 22:46

Попутно сделай ей транзакционность, сэкономишь моддерам нервные клетки и повысишь доверие к программе wink3.gif

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

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

P.S. Опщем как перечисленное поправишь - посмотрю опять )

Автор: EqKeeper Nov 16 2010, 02:39

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

Увы,

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 Nov 16 2010, 02:44

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

Автор: EqKeeper Nov 16 2010, 04:14

Блин, что-то я немного не туда копал... Там же лежит уже готовая строчка для соединения. И без нее редактор в любом случае не запустится! 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 Nov 16 2010, 10:55

Цитата
Блин, что-то я немного не туда копал... Там же лежит уже готовая строчка для соединения. И без нее редактор в любом случае не запустится!

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

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

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

Автор: EqKeeper Nov 16 2010, 11:36

thank_you.gif

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

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

Автор: Leon PRO Nov 16 2010, 12:02

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


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

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

P.S. Не знал, что текст диалогового окна можно скопировать на Ctrl+C biggrin.gif Век живи - век учись, блин =)

Автор: EqKeeper Nov 16 2010, 12:59

Цитата
Внес версионность - это гут, однако имя файла не говорит о версии, только имя архива. Даже сам файл в метаданных не указывает на ту версию, что указана на имени архива. Просто включи инкремент версии сборки при паблишинге в настройках проекта, а потом при архивировании просто указывай ее в имени архива, взяв руками из метаданных. Сам не запутаешься и пользователь не запутается. Я не предлагаю указывать версию в имени экзешника, т.к. в этом есть как + так и -

Принято.

Цитата
- Заменить текст на кнопке на "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 Nov 16 2010, 13:27

Нет, я сейчас на работе smile.gif
Но, допустим я типичный американский подросток, который думает, что у него стоит ДА, и что он моддер, хотя у него на самом деле чистая ОС biggrin.gif

Цитата
Или есть готовые решения?

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

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

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

Автор: EqKeeper Nov 16 2010, 13:59

Цитата
Но, допустим я типичный американский подросток, который думает, что у него стоит ДА, и что он моддер, хотя у него на самом деле чистая ОС

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

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

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

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

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

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

Запросто! smile.gif

Автор: Leon PRO Nov 16 2010, 15:13

Последнюю - с работы. К слову у меня тут даже MSSQL не стоит, не то что DA crazy.gif
Вчерашнюю - из дома.

Автор: EqKeeper Nov 16 2010, 17:40

Ну, вчерашняя и не должна была работать. Она свято верила, что ты сидишь под 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 Nov 16 2010, 20:59

Тестил дома на машине, на которой есть все.

---------------------------
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 Nov 17 2010, 05:20

Как проснусь посмотрю... unsure.gif

Автор: Lex Nov 17 2010, 10:07

можно под программу сделать отдельную тему (и соотв. ссылаться на нее, а не на раздел). И перенести туда посты отсюда, посвященные именно программе, а не процессу дрессировки тулсета.

Автор: Leon PRO Nov 17 2010, 12:07

Можно =)
Кто перенесет-то ? =)

Автор: Lex Nov 17 2010, 12:51

Сделал. Пост автора программы первый, поэтому он может поменять название темы на нужное.

Автор: Leon PRO Nov 17 2010, 14:07

Кипер, актуальные версии, полагаю, лучше помещать в первый пост и обновлять его.
Хорошо бы вести там чендж лог от версии к версии.

Автор: virus_found Nov 17 2010, 14:20

Не приложил исходники - подозрительно. А вдруг там вирусня закодирована? Я бы даже не притронулся к экзешке на вашем месте.

Автор: Leon PRO Nov 17 2010, 14:22

Гы, вирус - жжошь =)

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

С одной стороны ты прав.
С другой стороны, даже если закодить деструктивные действия, кто разберется во всем коде, если там около несколько сотен строк? wink3.gif
К тому же, где гарантия, что будут исходники именно этого экзешника =)
В третьих - давать или не давать исходники - дело сугубо личное, я бы даже сказал интимное.
В четвертых, качая с ваулта или сошиал биовэр - никто почему-то не спрашивает доказательства и исходники smile.gif

Автор: EqKeeper Nov 17 2010, 16:29

Цитата(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 Nov 17 2010, 22:51

В консоли:
Во время работы произошла ошибка...

В диалоге:
---------------------------
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 Nov 17 2010, 23:00

Вот злодей!
Проблема в том, что у меня она как раз в локал машин, а куррент юзере ее нет. =\ (Ибо я умный (и скромный) и когда писал просмотрел весь реестр - других записей не обнаружилось)
И есть только дефолт... проверять все, в порядке приоритетов?

Автор: Leon PRO Nov 17 2010, 23:56

Я бы проверял все в порядке нормальных шансов.
У большинства юзеров, думаю, в 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 Nov 18 2010, 00:22

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

Принято!

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

В общем, весело. smile.gif Сделаю. smile.gif

Автор: Leon PRO Nov 18 2010, 02:12

Ну как это нельзя ???? Только для этого надо использовать 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 Nov 18 2010, 04:44

Какое изысканное извращение. 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 Nov 18 2010, 16:32

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

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

А ты протестировал вход в БД по логину-паролю через строку подключения ? wink3.gif

Автор: EqKeeper Nov 18 2010, 18:09

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

Насчет экзешника - пасиб. Сейчас и проверю. smile.gif

Автор: Leon PRO Nov 18 2010, 20:39

Цитата
Я строку подключения и беру. 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.php?showtopic=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.php?showtopic=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 Nov 18 2010, 20:40

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

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

---

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

---

Провис он на таймауте... весело... Сейчас увеличу дефолтный. Заодно родилась еще одна страшная мысля - а что если сервер упадет во время работы... Нда... Все-таки надо бэкапить оригинальную таблицу. Причем дважды. И во второй раз изменять уже ее, а после ставить на место оригинальной...

Автор: Leon PRO Nov 18 2010, 20:49

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

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

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

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

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

Автор: EqKeeper Nov 18 2010, 21:08

Лентяй! smile.gif

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

---

Почапал читать.

Автор: Leon PRO Nov 18 2010, 21:15

Цитата
а потом уж о дизайне думать
biggrin.gif
Ну так сделай толковый вывод!

Автор: EqKeeper Nov 18 2010, 22:17

Уговорил:


---

Пока я докурочиваю софтину, подскажи - какого дьявола текст в TextBox'е автоматически выделяется при создании формы? Я так понял, это из-за того, что выставлено свойство Read Only...

Автор: Leon PRO Nov 19 2010, 09:55

ХЗ. Не сталкивался.

Автор: EqKeeper Nov 19 2010, 19:25

Тэкс, появилась еще одна проблема. На этот раз с бэкапом, а вернее с его восстановлением.
На таблице висит FOREIGN KEY. И вопрос в связи с этим лишь один: что делать? Во-первых, нужно ли что-нибудь делать при копировании таблицы? Я это делаю так:

Код
SELECT * INTO dbo.t_StringText_backup FROM dbo.t_StringText

Годится?

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

---

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

---

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

---

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

---

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

Автор: EqKeeper Nov 21 2010, 15:50

---

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

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

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

Автор: Leon PRO Nov 21 2010, 22:00

Сори, я пас. У меня просто нет времени, чтобы ещё и в этом ковыряться.

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

Автор: EqKeeper Nov 21 2010, 23:44

Ну, увы, тоже работа, так что с углубленным изучением SQL придется обождать. rolleyes.gif
Тогда - ждите. Как разберусь - выложу. Думаю, к выходным. Но тут без гарантий.

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

---

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

Автор: EqKeeper Nov 28 2010, 16:10

Версия 1.5. Тестируйте. rolleyes.gif

Автор: Leon PRO Nov 28 2010, 18:46

пишу в том порядке в каком увидел:

- Для среднестатистического конечного пользователя стал слишком сложный интерфейс. Если очень хочется предоставить расширенные настройки по конвертированию, лучше их "спрятать" в адвансед опшнс, но не дать простым пользователям шанса их "случайно" заюзать.
- Все известные эксепшны (например, если БД недоступна) не содержащие какой-либо полезной информации для разработчика (например строку подключения) в финале можно заменить в итоге на юзер-френдли сообщения. Такие большие простынки, как правило пугают их.
- Я тыкаю на кнопки и... ничего не вижу =) только кроме того, что открывается следующая кнопка. Это немного противоестественно, ИМХО.
- Я, простой американский бой. Вбиваю от балды пароль в поле пароля и на этапе "проверка соединения" получаю ошибку, причем не обрабатываемую приложением, а в стандартном виндовском окне (текст ошибки ниже). Логично, ведь моя база без пароля, а с 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 Nov 28 2010, 22:26

Цитата(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 Nov 28 2010, 22:41

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

О чем поподробнее, конкретно =)

Автор: kelamor Nov 29 2010, 10:48

Так что, можно пробовать? biggrin.gif

Автор: EqKeeper Nov 29 2010, 22:21

kelamor
Рискни. smile.gif

Leon PRO
Как использовать эти самые LinkLabel внутри текста текст бокса? smile.gif

Автор: Leon PRO Nov 30 2010, 08:33

Так у тебя же URL и е-мейлы не в текст боксе, когда ошибка выскакивает, а над ним, на форме.

2 kelamor
Почему бы и нет, только бэкап базы сделай =)

Автор: kelamor Dec 1 2010, 05:35

В общем попробовал smile.gif

Сделал Builder-to-Builder своего проекта и попытался пропатчить базу.
Последнее сообщение было: "Сохраняю изменения в таблицах". Сообщения о том, что работа завершена, не было (а должно было быть?).

Однако как не работал тулсет с русскими, так и не работает.

Потом тулсет снёс вместе с базой. Заново установил - тот же результат. Патч говорит, что всё сделал, но тулсет русский язык не понимает.

Стоит Win7 Pro. Патч запускал в режиме совместимости от имени администратора (если запускать не от имени администратора - прога не находит базу).

smile.gif Ещё глюк вылез... раньше не обращал на него внимания - не все русские буквы печатаются в тулсете, половина буковок не хочет. Может и раньше такое было, но раньше не пробовал русским писать, вот и не замечал. Хотя база здесь конечно не при чем smile.gif

Да, забыл, пробовал конвертить и в ntext и в char.

Автор: Ice Blade Dec 1 2010, 06:20

Судя по всему есть некоторый глюк который касается не патча, а самой БД - модификация работает только с "новыми" объектами. Объекты созданные в старой БД, почему-то продолжают забивать "????????", так что если ты пытался перевести на русский то что уже было создано на английском, - то это бесполезно. Единственный способ в данном случае, в ручную создавать тлк-шку, впрочем вместе с "подчисткой" ITP -шек это универсальный способ, действенный на 100% - однако не самый удобный.

Автор: kelamor Dec 2 2010, 04:00

Понято. В старых файлах и пробовал. В принципе в этом проекте мне русский нужен для комментов, ну а в следующих уже будем использовать smile.gif

Автор: Prince Mar 6 2011, 11:16

Извиняюсь за немного нубский вопрос, но как пользоваться программой? Перечитав все имеющиеся темы, в которых мог бы быть дан ответ на этот вопрос, не нашел ничего полезного для себя. Если не сложно, может кто-нибудь описать процесс изменения базы данных DAToolset? Ато не хочеться тыкая наугад её повредить...
Только вчера решил заняться освоением данного тулсэта, так что я ещё новичок, но бросать освоение этого тулсэта не собираюсь, и надеюсь когда-нибудь смогу поделиться парочкой интересных кампаний (идеи уже есть, осталось их только реализовать).

Автор: EqKeeper Mar 13 2011, 12:26

Прости, а что ты там можешь тыкнуть на угад?
Читаешь ридмишку.
Ставишь галочку, что ты прочел все вышеизложенное и готов к последствиям.
Тыкаешь кнопки по порядку - 1, 2, 3. Если на этапах 1 или 2 все рухнуло - бежишь сюда. Если нет - смело жмешь 3ю кнопку. Все.
Если подключение к базе требует пароля - пишешь пароль. Если не знаешь требует ли - значит не требует.
Смотришь, как пробегает до конца полоска. Видишь, что программка отработала. Закрываешь, забываешь. Если обвалилась - бежишь сюда.

С софтиной все. Дальнейшие извращения описаны в этой теме:
http://www.city-of-masters.ru/forums/index.php?showtopic=6206&st=50

Ice Blade и Leon PRO тебе в помощь. smile.gif

Автор: Prince Mar 13 2011, 16:19

У меня программы не может открыть базу данных. На втором этапе выскакивает вот такая ошибка:

Код
System.Data.OleDb.OleDbException: Cannot open database "bw_dragonage_content" requested by the login. The login failed.
   в System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString 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()
   в DATUnicode.FormMain.button2_Click(Object sender, EventArgs e)


Вот я и подумал, что может ещё какие-нибудь действия над базой данных проводить надо...
И ещё, где точно должна находиться программа? Хоть она у меня уже везде побывала, но вдруг ее надо засунуть куда-то очень далеко, чтоб она базу данных нашла...

Автор: Ice Blade Mar 13 2011, 17:53

На счёт проги не знаю но на, крайний случай можно вручную модифицировать БД см. http://www.city-of-masters.ru/forums/index.php?showtopic=6206&st=50#
Однако если почитаешь тему дальше, то выяснишь что не все так просто и одной модификации маловато, нужно ещё чистить gff-ки после экспорта(*.itp, *.utp и т.д), да и не стоит забывать что работать будет только с новыми str-ингами.

Автор: Prince Mar 20 2011, 11:43

Если я правильно понял, то созданием диалогов вы занимались не в самом тулсете, а через какие-то другие программы, предназначенные для этого, которые создают диалоговые файлы в расширениях типа gff . А, следовательно, чистить gff-ки нужно после экспорта их в сам мод.
Как и вы, я столкнулся с проблемой, которыя заключалась в том, что после прописки текста диалога он превращался в "?????". И хоть в игре текст воспринимался нормально, это затрудняло бы дальнейшее редактирование диалогов и ориентацию в них. Также из-за квадратиков над головой приходится давать имена объектам на английском. Как я понял, модификация базы решит эти проблемы. Но я прописывал диалоги в самом тулсете и они у меня хранятся в формате dlg, в папке проекта, причем каждый диалог в отдельном файле. Нужно ли мне всетаки заниматься чисткой gff-ок (вдруг я мое представление о том что это такое=false)? Если да, то можешь про это поподробнее написать?
Я пока что не имею достаточного опыта по созданию модов в каком-либо тулсете, пока я имею лишь замечательные идеи, желание их реализовать, ну и относительно небольшие знания в области программирования (которые с каждым днем потихоньку растут, не зря ж я в ВУЗ хожу... rolleyes.gif ). Поэтому, буду благодарен за любые полезные советы в области модостроения...

Автор: kelamor Jun 2 2011, 05:04

По поводу стрингов. Даже после модификации будет вылезать косяк. Когда ты создаёшь новую строку она сохраняется, экспортируется, чекинится и чекаутится на ура. Однако стоит отредактировать её - и пипец, опять вопросики появляются.
Я вручную в базе поменял у всех полей и в процедурах тип "text" на "ntext" и все (почти) поля в тулсете стали понимать русский язык, кроме тех, которые сохраняются в стрингах.
А процедуру, которая отвечает за редактирование строки - я не нашёл, возможно это происходит где-то в самом тулсе?

Автор: Silderon Sep 25 2011, 21:46

Скачал. Запустил, проклил по 1,2,3. Линия прогресса дошла до конца, в логе писало "Сохраняю таблицы". Открыл Тулсет, создал новый модель и тестовой диалог с 1 строчкой, написанной по-русски. Экпортировал, зашел в игру - отображается. Закрыл тулсет, открыл тулсет, забило знаками вопроса... ребят, что не так делаю? Уж совсем руки из одного места...

Автор: kelamor Sep 26 2011, 01:52

Silderon, мой предыдущий пост.
Реплики диалогов хранятся в str-ингах и на них изменение типов полей в базе (я во всяком случае такое поле не нашёл).

Автор: Silderon Oct 26 2011, 14:04

Во время использование Вашей программы под названием DaTUnicode получил такую ошибку:

System.Data.OleDb.OleDbException: Cannot alter column 'Text' to be data type text.
в System.Data.OleDb.OleDbCommand.ExecuteReaderIntern
al(CommandBehavior behavior, String method)
в System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
в DATUnicode.FormMain.button6_Click(Object sender, EventArgs e)

буду благодарен, если вы подскажете, как ее решить.

Автор: EqKeeper Nov 15 2011, 09:14

Prince, ответ дан в первой строке ошибки - тебе не дают подключиться к БД. Неверные логин\пароль. Логин там, вроде, постоянный. Значит неверный пароль (или глючит сервер).
Silderon, если это ты писал мне на мыло, то проблема решена. Если нет - нефиг выбирать в списках то, чего не знаешь, пытаясь превратить ntext в text (или maxvalue в text - не помню smile.gif).

Автор: kelamor Nov 25 2011, 20:59

Набил https://daforge.wordpress.com/2011/11/26/%d1%83%d1%80%d0%be%d0%ba%d0%b8-%d1%80%d1%83%d1%81%d1%81%d0%ba%d0%be%d0%b3%d0%be-%d1%8f%d0%b7%d1%8b%d0%ba%d0%b0/по обучению тулсета русскому языку. С месяц уже наверное работаю в русскоязычном, точнее - русскоговорящем, тулсете.
Базу правил вручную, с помощью Microsoft SQL Server Management Studio Express. Может EqKeeper сделает патчик?

Осталась проблема с именами, описаниями и всплывающими подсказками некоторых ресурсов в самой игре. Пока решаю путём удаления LocalString'ов.


Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)