C # — обновление файла базы данных на C: / или C:/folder вызывает фатальную ошибку файла только для чтения

#c# #database #permissions #readonly

#c# #База данных #разрешения #только для чтения

Вопрос:

У меня есть файл базы данных в моем каталоге C: / (который я также пытался поместить в C:/CustomerApp_C каталог). Я могу запустить приложение, и оно отлично загружает данные. Однако, когда я изменяю некоторые данные и нажимаю Сохранить, появляется сообщение «В вашем приложении произошло необработанное исключение. bla bla bla»… «Не удалось обновить «путь» к базе данных, поскольку база данных доступна только для чтения».

Затем он дает мне это в деталях:

 See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.Data.SqlClient.SqlException (0x80131904): Failed to update database "C:CUSTOMERAPP_CDATA.MDF" because the database is read-only.
   at System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
   at System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
   at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
   at System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
   at System.Data.Common.DbDataAdapter.Update(DataTable dataTable)
   at CustomerApp.CustomerAppDS2TableAdapters.CustomerTableAdapter.Update(CustomerDataTable dataTable) in C:UsersClarkeyDocumentsVisual Studio 2010ProjectsCustomerApp2CustomerAppCustomerAppDS2.Designer.cs:line 2311
   at CustomerApp.CustomerAppForm.button1_Click(Object sender, EventArgs e) in C:UsersClarkeyDocumentsVisual Studio 2010ProjectsCustomerApp2CustomerAppCustomerAppForm.cs:line 123
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Messageamp; m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Messageamp; m)
   at System.Windows.Forms.ButtonBase.WndProc(Messageamp; m)
   at System.Windows.Forms.Button.WndProc(Messageamp; m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Messageamp; m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Messageamp; m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
CustomerApp
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Users/Clarkey/Documents/Visual Studio 2010/Projects/CustomerApp2/CustomerApp/bin/Debug/CustomerApp.exe
----------------------------------------
System.Windows.Forms
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.1 built by: RTMRel
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.1 built by: RTMRel
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.1 built by: RTMRel
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Configuration
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.1 built by: RTMRel
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Data
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
System.Core
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.1 built by: RTMRel
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Data.DataSetExtensions
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.1 built by: RTMRel
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Data.DataSetExtensions/v4.0_4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll
----------------------------------------
System.Numerics
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.1 built by: RTMRel
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll
----------------------------------------
System.Transactions
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Transactions/v4.0_4.0.0.0__b77a5c561934e089/System.Transactions.dll
----------------------------------------
System.EnterpriseServices
    Assembly Version: 4.0.0.0
    Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.EnterpriseServices/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
  

Я проверил свойства файла, и во всех 3 (папке, файле базы данных и файле журнала базы данных) флажок «Только для чтения» снят. Логически это заставляет меня думать, что он должен быть доступен для записи… но, о нет, это не так ..!

Я попробовал следующее, как было предложено в поиске Google:

 File.SetAttributes(@"C:CustomerApp_CData.mdf", FileAttributes.Normal);
File.SetAttributes(@"C:CustomerApp_CData_log.ldf", FileAttributes.Normal);
  

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

У кого-нибудь есть какие-либо идеи относительно того, что здесь происходит? Будем признательны за любую помощь.

Кстати, мое имя пользователя (и имя пользователя клиентов, когда это будет завершено) имеет права администратора.

С уважением,

Ричард

Комментарии:

1. Как вы подключаетесь к базе данных? Можете ли вы изменить базу данных из SSM?

2. Я предполагаю, что под SSM вы имеете в виду SQL Server Manager ..? По сути, у меня есть внешняя база данных, настроенное в VS соединение, из которого я перетащил две таблицы в DataSet. Я использую DataSet для заполнения DataGridView. Однако DataGridView не может изменить базу данных, равно как и подключение. Я могу просматривать данные как в VS, так и в приложении, но не обновлять их.

Ответ №1:

Если вы работаете в Windows 7, вам следует помнить, что для записи в корневой каталог в этой ОС требуются права администратора (для процесса записи).

Комментарии:

1. ДА, это сделало это… Я открыл файл app.manifest и изменил asInvoker на highestAvailable . Затем он запросил перезапустить файл devenv, и затем приложение заработало отлично!

Ответ №2:

Возможно, у вас нет прав на его запись C: Попробуйте запустить свое приложение от имени администратора

Комментарии:

1. Как мне настроить его для этого в VS 2010?

2. Щелкните правой кнопкой мыши на ярлыке VS 2010, используя «запуск от имени администратора» при работе над этим проектом. Используйте файл манифеста на выходе, который указывает, что он запускается от имени администратора, или щелкните правой кнопкой мыши «запуск от имени администратора» в вашем приложении при его запуске.

3. Спасибо, но я заставил это работать, просто установив запрошенный уровень разрешений (или что бы это ни было) в манифесте. Теперь я действительно могу что-то сделать!

Ответ №3:

Попробуйте щелкнуть правой кнопкой мыши по файлу, выбрать свойства, а затем выбрать панель безопасности. Убедитесь, что пользователь, запускающий ваше приложение (возможно, вы сами), имеет доступ на запись к файлу.

Ответ №4:

Должна ли база данных находиться на диске C или в каталоге, созданном в C:? Кроме того, на какой версии Windows вы разрабатываете? Более поздние версии затрудняют создание файлов за пределами каталога документов пользователя в качестве меры предосторожности.

Ответ №5:

Предполагается, что SQL Server основан на трассировке стека.

Попробуйте:

  • перейдите в SQL Server Management Studio
  • щелкните правой кнопкой мыши базу данных и выберите
  • свойства выберите страницу «параметры»
  • прокрутите вниз и проверьте, доступно ли состояние базы данных только для чтения.

Ответ №6:

Попробуйте,

Установите безопасность ваших файлов Data.mdf и Data_log.ldf для всех, полное разрешение.

Надеюсь, это решит