2012-01-18 3 views
2

Я работаю над приложением C# .NET, которое использует LINQ to SQL для доступа к базе данных. К сожалению, я провел последние 4 часа, пытаясь заставить приложение работать в моей домашней сети. Я привел приложение домой раньше для разработки без проблем и передал изменения на работу. Однако сегодня вечером я продолжал сталкиваться с проблемами доступа к базе данных и заметил, что строка подключения в моем DAO ссылается на мою работу ComputerName/Instance. Я искал все свои решения для своего рабочего имени ПК (например, BEN-Laptop), а также использовал расширенные параметры поиска Windows для поиска по всему каталогу. Однако я не мог найти ссылки на мой рабочий ПК. Когда я привел домой приложение для работы, я изменил все значения строки подключения с моего рабочего компьютера на мой домашний компьютер, и я не понимаю, почему строка подключения в DAO каким-то образом все еще ссылается на мой рабочий экземпляр ПК и SQL. Является ли эта информация кэшированной где-то, потому что я в недоумении.LINQ to SQL DataContext не обновляет ConnectionString

+0

Чтобы быть более конкретным, свойства соединения, которые я изменил, были в основном в файле app.config и dbml. Я просто не понимаю, почему мое приложение все еще пытается найти базу данных на моем рабочем ПК, когда я использовал каждый механизм поиска, чтобы изменить ссылки с моего рабочего ПК (т. Е. Ben-Laptop на Major-HomePC). Единственное, о чем я могу думать, это то, что эта информация кэшируется где-то вне моего проекта, но я довольно новичок в разработке .NET и чувствую, что исчерпал свои усилия. Пожалуйста, предложите предложения. Я это оценил. – Grasshopper

+0

Попробуйте «Очистить» ваш проект и сделайте 'ReBuild'. Во-вторых, строка подключения читается только из 'app.config', можете ли вы сказать мне, где вы нашли ее в файле' dbml'. Изменения в app.config отражаются только при перезапуске приложения.Каков тип приложения winform, консоли или окна? –

ответ

2

Если вы откроете свой файл dbml в представлении дизайна и просмотрите свойства (F4), вы должны найти свойство ConnectionString. Когда вы расширяете список доступных строк подключения, он должен указать источник каждой строки. Скорее всего, это файл настроек. (~ \ Properties \ Settings.settings)

В идеале, когда вы создаете контекст данных, вы должны использовать конструктор, который принимает строку соединения, и вы точно узнаете, откуда он.

using(var dc = new TestDataContext(connectionString)) 
{ 
    // Do stuff 
} 
1

Проблема с моей строкой подключения базы данных в DataContext была фактически результатом того, что мой коллега реструктурировал решение. Короче говоря, приложение Windows находится в одном проекте, и логика базы данных компилируется как DLL в другом проекте. Приложение Windows ссылалось на старую версию DLL, которая, видимо, имела мои рабочие настройки для строки подключения. Мне просто пришлось изменить ссылку в моем проекте на правильную DLL, и все сработало нормально. Это также объясняет, почему я не мог найти ссылки на мой рабочий ПК в решении, потому что я предполагаю, что параметры скомпилированы в DLL-файл. Попытка отладить мой проект DLL базы данных помогла привести к этому открытию. После установки нескольких точек останова в базовых классах DAO и Repository и обнаружении IDE было обход точек останова, это побудило меня проверить ссылки.

+0

Теперь я передаю строку соединения в мои конструкторы, как было предложено выше. – Grasshopper

+0

Для дальнейшего использования вам следует попробовать использовать ссылки на проект, а не ссылаться на выход DLL проекта. –

1

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

string pp = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\AdventureWorks2012_Data.mdf;Integrated Security=True;Connect Timeout=30"; 

второй:

DataClasses1DataContext dc = new DataClasses1DataContext(pp); 

третий: делать изменения на экземпляры таблицы classs

четвертый:

dc.Persons.InsertOnSubmit(person); 
     dc.SubmitChanges(); 
+0

Еще один ответ, где понятно, что вы не понимаете вопроса –

1

У вашего конструктора DataContext() отсутствует строка, которая сообщает ей путь к вашей фактической базе данных.

+0

да получил его помощник –

Смежные вопросы