VS шалит с базой sql server

ADO.NET
  1. 3 года назад

    Добрый день. Подскажите пожалуйста новичку по следующей проблеме:
    1)Создаю базу данных в access, конвертирую её в базу sql server (назовём её db1.mdf), далее в access создаю новую пустую базу db2, таблицы которой - присоединяю по ODBC таки образом, что через access можно было добавлять/удалять записи. (db2 по замыслу нужна для того, чтобы пользователи могли из access работать с базой db1.mdf).
    2) Создаю приложение Widows Forms в VS2010, добавляю класс LINQ to SQL(называется JB1), подсоединяюсь к db1.mdf, перетаскиваю таблички в O/R Designer (Две таблицы для простоты - Округ и Поликлиника), далее добавляю новый источник данных из полученных объектов Округ и Поликлиника. Всё замечательно, на форму добавляю GridView и на событие Load добавляю источник данных:

    namespace BaseConnectionTest2 { public partial class Form1 : Form { JB1DataContext jbDataContext = new JB1DataContext(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { округBindingSource.DataSource = jbDataContext.Округs; //Источник данных поликлиникаBindingSource.DataSource = jbDataContext.Поликлиникаs; } } }

    3)Запускаем, всё работает( по книжке делал, так что вряд ли не заработало бы).

    1. Да тут ещё важный момент - я не копировал исходную базу в проект, а работал с той которая была создана из access путём конвертации в sql server.
    2. Теперь проблема - открываю access чтобы изменить данные в db1.mdf и увидеть изменение у себя в проекте vs, но нет, ни в какую access не хочет подключаться к db1.mdf Пишет, не могу подключиться к базе ODBC. В чём же дело?Я туговат пока в этой отрасли, но думаю что vs каким то образом модифицирует исходную базу так, что даже в SQL Server Managment Studio она перестаёт отображать таблицы и выдаёт следующую ошибку:

    База данных JB_12_04_13_v1_2003SQL недоступна. (ObjectExplorer)

    Вобщем пожалуйста объясните что не так, диплом очень близко, очень. Надо чтобы из access можно было добавлять записи в базу, а в приложении обрабатывать данные из этой базы и рисовать картинки на основе обработанных данных. SQL я не знаю, осилил 27 глав в Beginning Microsoft Visual C# 2008 со всеми упражнениями, думал что смогу сделать задуманное. Но пока ни в какую не идёт. Любая инфа пригодится, в.т.ч. можно на английском.

  2. Alexandr_Erohin

    Apr 15 Администратор

    Найти это сообщение SergMCD далее в access создаю новую пустую базу db2, таблицы которой - присоединяю по ODBC таки образом, что через access можно было добавлять/удалять записи. (db2 по замыслу нужна для того, чтобы пользователи могли из access работать с базой db1.mdf).

    Насколько я знаю в Access можно напрямую подключиться к базе данных SQL Server, возможно стоит создать прямое подключение к db1 и не использовать db2.

  3. Спасибо!Попробовал. Но дело в том, что суть не изменилась, да и db2 я зря назвал базой, это скоее клиенская часть, в которой формы для добавления записей в базу db1. Подключается к db1 access всё равно используя ODBC. Напрямую вы это имели в виду?ODBC?Или что то другое? Повторю, вопрос был про скорее про Net - что VS делает с исходной базой после того, как я создаю классы в O/R Designer и затем использую их в работе. Для access база перестаёт быть доступной, впрочем как и для Server managment studio.

    Пока писал мысль пришла - можно ли создать копию исходной базы, с ней поработать через O/R Designer, а затем в конструкторе DataContext указать новую строку подключения, в которой в качестве базы используется исходная базе?

  4. Зафиксировали прогресс. Нашёл на форуме следующую мудрую мысль:
    link text

    Answer 1
    Hi,

    The errors might be caused by:
    1. Make sure that the data file is available at the location pointed to by the connection string. For a relative path, when you run the application, |DataDirectory| will point to the location of your application executable. When you debug the program, this is usually ...\projectfolder\bin\debug. Please check the data file is available there.
    2.. If you set User Instance=true in the connection string, a user instance is generated at the first time. Then, the master and msdb system databases are copied from the Template Data folder to a path under the user's local application data repository directory for exclusive use by the user instance. This path is typically C:\Documents and Settings\<UserName>\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS. When a user instance starts up, the tempdb, log, and trace files are also written to this directory. A name is generated for the instance, which is guaranteed to be unique for each user. Please check the C:\Documents and Settings\<UserName>\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS directory and delete it. This location is for Windows Server 2003.The location for vista is C:\users\<username>\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS.
    3. The user instance cannot attach the database because the user does not have the required permissions. The user instance executes in the context of the user who opened the connection—not the normal SQL Server service account. The user who opened the user instance connection must have write permissions on the .mdf and .ldf files that are specified in the AttachDbFilename option of the connection string.

    If there are any more questions, please let me know.
    Thanks.

    Для не дружащих с английским - суть дела была в том, что если в строке подключения указать параметр UserInstance = true, то при первом подключении из Visual Studio создаётся какой-то ещё пользователь, который получает право на доступ к этой базе, все остальные пользователи "его теряют". Знаю что объяснение кривовато, но лучше всё равно не напишу. Если же указать false, то ничего такого не происходит и база остаётся доступной через Sql Server Configuration Manager. Да и всё что можно запускать, надо запускать в режиме администратора. Либо выставлять разрешения ко всем необходимым файлам.

    Уважаемые,если Вы сможете объяснить это нормально, то напишите пожалуйста, всё-таки хочется вникнуть что же такое произошло!

или зарегистрируйтесь чтобы ответить