I recently switched a windows forms application to use SQL Compact 4 database and Entity Framework. I handle the updates to the application through the application (no windows services). When an update is sent out to the device, all data is cleared (the data directory is deleted) and the exe gets replaced with a new exe.
This works fine except the next time the application is launched, Windows pops up with a message "Please Wait While Windows Configures 'Application Name'". Windows then proceeds to add back the database file automatically and set my exe back to the previous version.
Why is Windows adding the old database file and reverting my exe? How do I stop this from happening?
It appears that adding the database to the program data folder in the installer project caused this. Removing the file from there and programmatically adding the database file there resolved this issue.
Related
im using MS-access as my database. I've already finished the project and it is working perfectly fine.
my database location while im still developing is in C:\Users\Users\documents and the other one located at C:\Users\Users\documents\visual studio 2010\projects\project1\project1\bin\debug
is bad to put the database at two different folder?
1st problem: now creating a setup and deployment project, i use setup wizard and checked all then build it. installation of setup is successful but when i try to run the program, it doesnt respond,
2nd problem: i cant see my 1st database located at program files, only the second one and maybe this is the cause of unresponsive app.
copying the debug files into other computer and copying manually my database to user\document which i have to change permission and the copied debug files runs well, but i have to create an installer. how to do it?
from my server explorer i was wondering there is only one database, yet my program works fine when running debug? reconnecting the unseen database would be a lot of work because it is my main database.
You should check the database which is connected to your project and the path which is associated.
Try Application.StartUpPath in your connection.
I have a strange problem that is reoccurring. My app is a MVC5 application using EF code first and SQLExpress. My solution uses 4 databases - 3 of which work without a problem. The fourth database is constantly 'acquired' by 'System'. Everyday for the last week when I boot up I have a problem.
When I run the app and the DatabaseInitializer runs I get this exception :
Cannot open database "databaseName" requested by the login. The login failed. Login failed for user 'Computer\UserName'.
Weird. I read some S.O. articels about changing permision, but that smells to me. This database shouldent be in someone elses domain in the first place! The other databases work fine !
So I go about deleting the database. I get this error.
Error deleting file 'database.mdf'. The process cannot access the file because it is being use by another process.
So I reboot and go to delete the database directly from the windows explorer.
The action can't be completed because the file is open in System
I was finally able to delete the file by running my PC in safe mode and deleting it there. Im not sure what the cause of this is. I am running SQL express and I don't see any SQL background services running.
I have create an application for windows, where i am using phone's sqlite as DB to store data. While testing the app in Emulator after the first time(i.e reinstallion of the app), the data of the DB gets erased every time.
So can any one please tell me How to:
Save the existing data of the DB before reinstalling the app.
Modify the .sdf file Manually (with out using the app)
To save the data in some other way, which will not be affected by the reinstallation of the app.
More Information regarding ways to add data to .sdf file are appreciated ...
Edit: Is it possible to browse and edit the .sdf file in phone when application gets installed
If you run the app via the Emulator, every time you close the emulator the app along with its components gets uninstalled. To prevent this , don't close the emulator everytime you run the app. Keep the emulator open, and run the program.
In the phone once the app is installed, the data is not deleted from the database and it is persisted.
The SDF can be modified using the Server Explorer in Visual Studio, add a database connection to SQL CE 3.5 and point to your sdf. You can modify the data from there.
You can also use the Isolated Storage explorer to open the SDF. http://wp7explorer.codeplex.com/
I need to copy my SQL Server DBs to a folder. The files are attached to SQL Server, which I have detached using my code. When I try to copy these files using
My.Computer.FileSystem.CopyFile(filePathToCopyFrom1, targetFilePath1)
It returns error:
"Access to the folder D:\MyDbs is denied"
When I manually coped these files, it asked "You need Administror permission to copy these files" I clicked continue and it worked but how to fix this using my vb.net code?
I have given Full Control to administrator from Windows but still it did not work.
Thanks
Seems that the detaching process went well. You can copy through windows explorer, but not from you application. The key difference here is that the files are protected to be accessed by the administrator user only.
Then, you need to run your application using an administrator windows account so that the application inherits the permissions of the user to be able to perform this operation.
Remember, if you are using Windows Vista+ (which I assume you do) the root folder is almost off limits. You can run the App as Administrator, or copy it to a folder in the root. The other point is that where you copy from. If the DB is currently in Program files, it is very possible that you will get this problem as well, and then you will have to run the application as Administrator.
Right click on the application, and select Run as Administrator, or select properties and in Compatibility check the box that the program should be running as Administrator. If you use the latter, then a box will pop up every time you run it, unless you change the User Account Control settings.
I have a simple WPF application that uses ClickOnce to handle installing. Within this application is a compact database. Through testing I have found that when I publish a new build this database will get overwritten, which is not what I want. Is there anyway I can have fine grained control over what files are updated? I assume ClickOnce is simply checking the hash of the database file, deciding that it has changed and pulling the update.
As a workaround I have since removed the database from the files that are included with the published application so the original remains on the client machine after an update, untouched.
Not a great solution I know
Thanks,
ClickOnce deployments segregate the Application Files into "Include" or "Data file". You can specify what each file is in visual Studio by going to the project Properties page, Publish tab, then clicking the "Application Files..." button. You can then set your .sdf file to "Data File" under the Publish Status column.
Data Files that are downloaded with a ClickOnce application are then placed in a separate directory for each new version.
The idea is that on the first run of the new application version, you go retrieve all the user's private data from their old-version data files and incorporate that data into the new data files which have just been downloaded with your new version.
I think you'll find the information you need at Accessing Local and Remote Data in ClickOnce Applications. Specifically, look at the sections "ClickOnce Data Directory" and "Data Directory and Application Versions."
To access a SQL Server CE database located in your Data directory, use a connection string similar to the following:
<add
name="MyApplication.Properties.Settings.LocalCacheConnectionString"
connectionString="Data Source=|DataDirectory|\LocalCache.sdf"
providerName="Microsoft.SqlServerCe.Client.3.5" />
The "|DataDirectory|" is a special syntax supported by SQL CE and SQL Express and resolves at runtime to the proper directory.
If you so much as open that SQLCE database included in your project, it will change the time stamp on the database, and ClickOnce will deploy it and put the old version under the \pre subfolder.
You might want to consider this method for handling this. Then if you accidentally deploy a new version of the database and don't realize it, you're not hosed. If you intentionally make changes, you can change the database structure of your current database with SQL queries, and pull data from the new copy deployed to the Data Directory (that you're otherwise ignoring) when you need to.
RobinDotNet