2010-10-29 27 views
0

J'ai un fichier de base de données dans mon répertoire C:/(que j'ai aussi essayé de placer dans le répertoire C:/CustomerApp_C). Je peux exécuter l'application et elle charge les données très bien. Cependant, lorsque je change certaines données et que je clique sur Enregistrer, l'exception "Une exception non gérée s'est produite dans votre application" bla bla bla "..." Impossible de mettre à jour le "chemin" de la base de données car la base de données est en lecture seule.C# - mettre à jour le fichier de base de données dans le dossier C:/ou C:/provoque une erreur de fichier readonly fatale

Il me donne alors ce dans les détails:

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_C\DATA.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:\Users\Clarkey\Documents\Visual Studio 2010\Projects\CustomerApp2\CustomerApp\CustomerAppDS2.Designer.cs:line 2311 
    at CustomerApp.CustomerAppForm.button1_Click(Object sender, EventArgs e) in C:\Users\Clarkey\Documents\Visual Studio 2010\Projects\CustomerApp2\CustomerApp\CustomerAppForm.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(Message& m, MouseButtons button, Int32 clicks) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
    at System.Windows.Forms.Button.WndProc(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& 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%20Studio%202010/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. 

J'ai vérifié les propriétés du fichier et les 3 (le dossier, le fichier de base de données et base de données fichier journal) ont la lecture seule case cochée. Logiquement cela me fait dire qu'il doit être inscriptible ... mais oh non ce n'est pas ..!

J'ai essayé ce qui suit, comme l'a suggéré dans une recherche Google:

File.SetAttributes(@"C:\CustomerApp_C\Data.mdf", FileAttributes.Normal); 
File.SetAttributes(@"C:\CustomerApp_C\Data_log.ldf", FileAttributes.Normal); 

L'utilisation de ces deux lignes empêche l'application de même montrer à l'écran - même si je l'ai mis après le reste du code.

Quelqu'un at-il une idée de ce qui se passe ici? Toute aide serait grandement appréciée. Par ailleurs, mon nom d'utilisateur (et le nom d'utilisateur du client, lorsque cela est terminé) a des autorisations d'administrateur.

Cordialement,

Richard

+0

Comment vous connectez-vous à la base de données? Pouvez-vous modifier la base de données à partir du SSM? – Lazarus

+0

Im en supposant par SSM vous voulez dire SQL Server Manager ..? J'ai essentiellement une base de données externe, une connexion installée dans VS à partir de laquelle j'ai traîné deux tables à un DataSet. J'utilise le DataSet pour remplir un DataGridView. Cependant, DataGridView ne peut pas modifier la base de données, pas plus que la connexion. Je peux parcourir les données à la fois dans VS et dans l'application, mais pas le mettre à jour. – ClarkeyBoy

Répondre

2

Si vous travaillez sur Windows 7, votre faut se rappeler que l'écriture dans le répertoire racine dans ce système d'exploitation nécessite des droits d'administrateur (pour le processus d'écriture).

+0

OUI cela l'a fait ... J'ai ouvert le fichier app.manifest et ai changé asInvoker en le plus haut disponible. Il a ensuite demandé de redémarrer le fichier devenv, puis l'application a parfaitement fonctionné! – ClarkeyBoy

0

Essayez un clic droit sur le fichier, choisissez Propriétés, puis choisissez le volet de sécurité. Assurez-vous que l'utilisateur exécutant votre application (probablement vous-même) a un accès en écriture au fichier.

0

La base de données doit-elle être hébergée sur le lecteur C ou sur un répertoire créé dans C: \? De plus, sur quelle version de Windows travaillez-vous? Les versions plus récentes rendent difficile la création de fichiers en dehors du répertoire Documents de l'utilisateur par mesure de sécurité.

0

En supposant SQL Server basé sur la trace de la pile.

Essayez:

  • aller dans SQL Server Management Studio
  • clic droit sur la base de données choisir
  • propriétés sélectionnez la page
  • défilement "Options" vers le bas et vérifier si l'état de la base de données Lecture seulement.
1

Vous pouvez éventuellement ne pas autorisé à écrire C: \ Essayez de lancer votre application en tant qu'administrateur

+0

Comment puis-je le configurer à partir de VS 2010? – ClarkeyBoy

+0

Faites un clic droit sur le raccourci VS 2010 utilisez "Exécuter en tant qu'administrateur" lorsque vous travaillez sur ce projet. Utilisez un fichier manifeste sur votre sortie qui indique qu'il fonctionne en tant qu'administrateur, ou faites un clic droit sur "Exécuter en tant qu'administrateur" sur votre application lors de son exécution. – Brian

+0

Merci, mais je l'ai eu en travaillant simplement en définissant le niveau d'autorisation demandé (ou quoi que ce soit) dans le manifeste. Maintenant, je peux réellement faire quelque chose! – ClarkeyBoy

0

Essayez,

Définissez la sécurité de vos fichiers Data.mdf et Data_log.ldf à tout le monde, l'autorisation complète.

Espérons qu'il résout