F.moghaddampoor Ответов: 1

Ошибка только для чтения в файле mdf после установки программы установки


Привет ребята,
у меня есть проблема,слишком много парней не смогли ее решить,я создал проект и создал datagridview,в нем я создал файл базы данных(MDF),и я использовал linq для записи и чтения,например,обновления,удаления и добавления записей в мою базу данных ,наконец,мой проект завершен,но когда я создаю установку для него, после установки sql server 2008,.net client profile,... когда я запускаю свое приложение и пытаюсь обновить его, он говорит, что база данных доступна только для чтения.у меня нет этой проблемы в режиме debugor release,кто-нибудь может мне помочь?я трачу слишком много времени на решение этой проблемы.

Pablo Aliskevicius

Действительно ли файл .mdf на диске доступен только для чтения? Это могло бы быть так, если бы файл был прочитан только тогда, когда вы упаковали свой установщик. Например, если ваш файл .mdf находится под управлением исходного кода, и вы проверили его перед упаковкой установщика.

F.moghaddampoor

Привет Пабло,
Я проверил атрибуты файла ,но он не только для чтения.

F.moghaddampoor

и спасибо за ваш ответ

F.moghaddampoor

как же тогда я могу вывести свои файлы из системы управления версиями?

F.moghaddampoor

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

F.moghaddampoor

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

F.moghaddampoor

пожалуйста ,помогите ребятам, я сейчас несчастна!

F.moghaddampoor

это и есть ошибка:
Дополнительные сведения о вызове см. В конце этого сообщения
отладка just-in-time (JIT) вместо этого диалогового окна.

************** Текст Исключения **************
System.Data.SqlClient.SqlException (0x80131904): не удалось обновить базу данных "C:\PROGRAM FILES\DEFAULT COMPANY NAME\SETUPER2\F. MDF" , поскольку база данных доступна только для чтения.
в системе.Данных.Sqlclient как.Объект sqlconnection.OnError(исключение SqlException, логическое breakConnection)
в System.Data.SqlClient.SqlInternalConnection.OnError(исключение SqlException, логическое breakConnection)
в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
в System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
в системе.Данных.Sqlclient как.Свойство sqlcommand.FinishExecuteReader(объект sqldatareader, ДС, RunBehavior runBehavior, строки resetOptionsString)
в системе.Данных.Sqlclient как.Свойство sqlcommand.RunExecuteReaderTds(метода commandbehavior cmdBehavior, RunBehavior runBehavior, логическое returnStream, логическое асинхронного)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
в системе.Данных.Sqlclient как.Свойство sqlcommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
в системе.Данных.Sqlclient как.Свойство sqlcommand.Метод executenonquery()
в System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] подзапросы, Object lastResult)
в System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] подзапросы)
в System.Data.Linq.SqlClient.SqlProvider.Системы.Данных.В LINQ.Поставщик.IProvider.Execute(запрос выражения)
в системе.Данных.В LINQ.Класс DataContext.ExecuteMethodCall(экземпляр объекта, объект methodinfo объект methodinfo, объект[] параметры)
в Serial_port_exporter.LINQDataContext.Storeintable(допускающий значение null,`1 строку, строку год, месяц строка, строки, день, строка час, минуту строку, строку, во-вторых, повторение строки, строки X, г строку, строку Z, строку оператора) в E:\Setups\majid-serial порт экспортер-4-7-2012-Б\последовательный порт консигнант 2\последовательный порт экспортер\LINQ на.дизайнер.CS:линия 86
в Serial_port_exporter.Форма form1.Btnadd_Click(объект отправителя, EventArgs В Е) в E:\Setups\majid-serial экспортер-4-7-2012-B порт\экспортер последовательный порт 2\экспортер последовательный порт\форму form1.CS:линия 180
в Serial_port_exporter.Форма form1.button4_Click(объект отправителя, EventArgs В Е) в E:\Setups\majid-serial экспортер-4-7-2012-B порт\экспортер последовательный порт 2\экспортер последовательный порт\форму form1.CS:линия 823
в системе.Окна.Формы.Контроль.OnClick(EventArgs e)
в системе.Окна.Формы.Кнопка.OnClick(EventArgs e)
в системе.Окна.Формы.Кнопка.OnMouseUp(MouseEventArgs mevent)
в системе.Окна.Формы.Контроль.WmMouseUp(Message& m, кнопка MouseButtons, Int32 клика)
в системе.Окна.Формы.Контроль.WndProc(сообщение& m)
в системе.Окна.Формы.ButtonBase.WndProc(сообщение& m)
в системе.Окна.Формы.Кнопка.WndProc(сообщение& m)
в системе.Окна.Формы.Контроль.ControlNativeWindow.OnMessage(сообщение& m)
в системе.Окна.Формы.Контроль.ControlNativeWindow.WndProc(сообщение& m)
в системе.Окна.Формы.Родное окно.Обратного вызова(hwnd элемента указателя IntPtr, int32 и глутамат натрия, указателя IntPtr параметр wparam, указателя IntPtr lparam должен)


************** Загруженные Сборки **************
mscorlib
Версия Сборки: 4.0.0.0
Версия Win32: 4.0.30319.261 (RTMGDR.030319-2600)
Кодовая база: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
Экспортер последовательных портов
Версия Сборки: 1.0.0.0
Версия Win32: 1.0.0.0
Кодовая база: file:///C:/Program%20Files/Default%20Company%20Name/Setuper2/Serial%20port%20exporter.exe
----------------------------------------
Система.Окна.Формы
Версия Сборки: 4.0.0.0
Win3

majune

Похоже,это проблема с разрешениями, есть ли у вас разрешение на создание/изменение/удаление файла в папке "C:\PROGRAM файлы\название компании по умолчанию\SETUPER2"? вы можете попробовать создать/изменить/удалить один файл в папке.

F.moghaddampoor

Да,это проблема с разрешениями,я могу изменить разрешение пользователя mdf-файла и ldf-файла для записи в файлы,но после установки он возвращается в свой первый режим,только для чтения для пользователей.даже я могу изменить разрешение файлов после установки,и моя программа будет работать, но конечные пользователи этого не понимают, поэтому мне нужно иметь бесплатное разрешение для каждого из них.как я могу это сделать?

F.moghaddampoor

majune как мы можем изменить атрибут базы данных для записи и чтения?plz скажите мне в хороших деталях.tnx раньше.

Sergey Alexandrovich Kryukov

Должен вас предупредить: я нашел на этом форуме три "ответа", которые вы формально приняли. Как вы можете это объяснить? Это злоупотребление, а злоупотребление может повлечь за собой сообщения о злоупотреблениях и даже запрет, в плохих случаях.
—СА

peter_shadows

Все в порядке..........но ... как только вы поместите файл mdf в %AppData%. КАК SQLEXPRESS НАЙДЕТ ЕГО. Если |DataDirectory| в строке подключения указывает на .ТОЛЬКО ПАПКА EXE???

1 Ответов

Рейтинг:
6

pietvredeveld

Ваш файл базы данных находится в %ProgramFiles%. Он должен быть в %AppData%

Пит


F.moghaddampoor

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

majune

двусторонняя связь:
1.измените проект установки.
когда вы делаете установку,вы должны указать путь к файлу f.mdf,убедитесь, что файл будет установлен в папку AppData.
2.скопируйте файл f.mdf в папку AppData с помощью приложения.
каждый раз,когда вы запускаете приложение, первое, что нужно сделать, это скопировать файл в папку AppData,
вы можете добавить следующий код в свой основной метод(или init) и повторить попытку:
-----------------------------------------------------------------------------------
строковый параметр sourcepath=@"файлы C:\PROGRAM \" название компании " по умолчанию\SETUPER2";
строка appDataPath= Environment.GetFolderPath(Environment.Специальная папка.Данные приложения);
строка fileName="F. MDF";
System.IO.File.Copy(sourcePath+"\\"+fileName, appDataPath+"\\"+fileName ,false);
----------------------------------------------------------------------------------
*1 лучше.

F.moghaddampoor

Вот оно. Ответ правильный. Большое спасибо. :)

F.moghaddampoor

я очень благодарен маджуне, я попробую это сделать.

member60

мои 5!

Volynsky Alex

Хороший ответ :)