How to read from an EDB database file - windows

Microsoft Edge and other Microsoft products use an Extensible Storage Engine. If you have edge installed on windows, you can find the database file here:
C:\Users\username\AppData\Local\Packages\Microsoft.MicrosoftEdge_xxxxxxx\AC
\MicrosoftEdge\User\Default\DataStore\Data\nouser1\xxxxxxxx\DBStore\spartan.edb
I would like to read this database from my .NET app.
The only tool I have seen for viewing this data appears to be deprecated:
http://www.woanware.co.uk/forensics/esedbviewer.html
I can't seem to find any relevant nuget packages for querying this type of database. Does anyone have experience working with this type of database?

The database engine is esent.dll, and you can access it in several different ways:
C API. https://msdn.microsoft.com/en-us/library/gg269259(v=exchg.10).aspx
C#. https://github.com/microsoft/managedesent
Simplified C# (Isam layer). Easier to use, but not everything is exposed. https://github.com/Microsoft/ManagedEsent/tree/master/isam
(Disclosure: I've worked on the above products.)
That being said, if you just modify a random database, you can impact the host process's integrity, and it might end up crashing.
If you're a law-enforcement agent and it's for forensic purposes, Microsoft should be able to assist you (I haven't done it myself, but I've heard that they'll do it).
-martin

Related

What is the best way to migrate online application to offline

I have a certain online application that generates reports(and prints them) based on some repository of information. Now I would like to make an offline application which is provides the same experience and in which the repository is pre-loaded into the users' computer. What is the best way to convert this online app to offline app. The first thing that came to my mind was setup a local server and database. This ensures the experience is consistent. But I'm open to other options, such as storing the data in a file system and then loading it via flash/flex based apps or C# or Java. The objective of this offline app is to provide the functionality(report generation) to users where internet is not feasible.
I am not sure about the windows aspect of your question, but if I was doing an offline web based page(s) I would be looking at a LocalStorage database (though it does have some downsides), but there are other alternatives such as WebSQL and IndexedDB.
If you have reports, do they still have value when they are out of date? Do you need to store the configuration of those reports or is it all just read only?
Shameless self promotion, I have a project that is designed to handle database synchronization, though it's not done, it's close. You can see it (with an ugly but very functional) demo at https://github.com/forbesmyester/SyncIt

Stand-alone app to enter records through forms?

I need to find a stand-alone (ie. no OpenOffice-based tools, for instance) Windows application that can present users with forms to enter records into an SQLite database. The goal is to migrate data from Excel sheets into a serverless, single-user database like SQLite.
As a bonus, the application would also have a somewhat-protected admin section so that I can also use it to CRUD data with the same app, but it's not a requirement.
There are a lot of applications listed on the official SQLite site: Can someone recommend one that is meant for end-users, either open- or closed-source?
Thank you.
Edit: the correct term I was looking for is "data entry form". Googling around didn't return a Windows application that makes it possible to easily write data entry forms to let end-users create/edit records, ie. with no direct access to the underlying tables.
I think FileMaker or Microsoft Infopath (May be with Sharepoint Services) could fulfill your needs completely. There are forms in both, validation, different available sources for keeping data, working over net. Both are very flexible and powerful. Infopath with Sharepoint Services can be installed and customized quite quickly.

Which MS technologies would be suited for a data intensive application?

I'm a junior VB.net developer with little application design knowledge. I've been reading a lot of material online regarding different design patterns, frameworks, and methodologies. It's become a bit confusing for me.
Right now I'm trying to decide on what language would be best suited to convert an existing VB6 application (with SQL server backend.) I need to update the UI and add more user functionality and reporting capabilities. Initially I was thinking of using WPF and attempting the MVVM model for this big project. Reports would be generated from SSRS.
A peer suggested using ASP.net and I don't have enough experience to determine what would be better. The senior programmers here are stuck on using VB6 and don't have any input on what to use. They are encouraging me to use the latest technologies.
This application would be for ~20 users in a central location. Ideally I would stick to a Microsoft .net language. Current interface is similar to a datagrid table where the user would click in to see the detail of each record. They would need to have multiple records open at any given time.
I look forward to all the advice I can get.
EDIT 2010/04/22 2:47 PM EST
What is your audience? Internal clients within an intranet
How complex are the interactions you expect to implement? not very... displaying data from SQL server to UI. Allow user updates to said data. Typically just one user modifying a record.
Do you require near real-time data updates? no
How often do you expect to update the application after the first release? twice/year
Do you expect a well-defined set of client platforms? Yes, windows xp environment, potentially upgrading to Win7. Currently in IE.6 moving to IE7 or 8 within a couple of months.
Do users need access from anywhere? No, just from their PC.
What would be wrong about building a simple ASP.Net application in VB.Net using Gridviews for allowing the data access and manipulation? Seems like a simple ADO.Net trial application if you aren't familiar with it in the beginning you will be by the end. CRUD applications are pretty common so it shouldn't be too hard to build it and then refine it as more requirements become apparent.
Sounds like you need to use a web-based solution--this eliminates alot of your potential distribution woes with multiple users. You could use silverlight, but if you are locked into SSRS, this might not be the way to go.

Microsoft CRM 4.0 data migration

I'm in the middle of a contract that is porting a company's hand-rolled Microsoft Access-based CRM to Microsoft CRM 4.0. It's all gone pretty well, but now I have to migrate the data across.
The data is all over the place in the source .mdb. Lots of tables, lots of duplication, and generally shows all the signs of an ad-hoc database which has grown organically (like weeds) over time.
So, my dilemma is this. Do I bite the bullet and write lots of queries inside Access to export the data into some intermediate format that CRM can somehow import? Or is there some other way? Are there any middleware tools that map data from one to the other that anyone here knows about?
Note this is my first time using CRM, so if the question is obvious, I appologise.
Cheers,
Shane
Dynamics CRM 4.0 provides built in tool called Dynamics CRM 4.0 Data Migration Manager to help developers migrate data from previous database into Dynamics CRM 4.0 database. I haven't used it extensively, but as far as i know, the previous data needs to be exported into a "standard" excel format provided by CRM 4.0 Data Migration Manager (DMM).
You can refer to below references :
http://blogs.msdn.com/crm/archive/2008/01/04/microsoft-dynamics-crm-4-0-data-migration-manager-with-john-o-donnell.aspx
http://www.microsoft.com/downloads/details.aspx?FamilyID=6766880a-da8f-4336-a278-9a5367eb79ca&displaylang=en
There is also 3rd party solutions called Scribe http://www.scribesoft.com/ that will help you migrate to Dynamics CRM 4.0 database
I've had success just using the mscrm api in these kinds of cases. You can write a .net app which use odbc to connect to your mdb then use the mscrm api to create the entities you need on that end.
Anyway you cut it - it's not too pretty but you can get the job done.
Good luck.
Ms CRM Service Reference
I am sorry to say, I think you have to bite the bullet and write queries to pull the data from various sources and use some intermediate database like access ( You may also use SQL server or any db)
In my experience of handling several data migration projects for various small and large enterprises, I have always uses MS access as my data massaging/pulling tool. It works great. It might sound a lot of work but it’s is definitely lot cheaper than buying any expensive tools and spending thousands of dollars configuring them.
I would recommend you save all your queries and write a macro to automate the import.
Hower trivial the query is, SAVE it. This will be very useful as you will have to do this again and again before you actually go live.
Once you automate it, it is just a matter of clicking a button.
Typically and data migrating project will undergo at least 2 iterations and it could go up to 10.
Once you have data in the intermediate database, you can use de duping tools to standardize and remove dups from your data. There are a lots of cheap tools available both online and offline.

Simple database application for Windows

I need to build a simple, single user database application for Windows. Main requirements are independence from windows version and installed software. What technologies (language/framework) would you recommend? My preference for language is the Visual Basic.
EDIT: What about VB.Net and SQL Server Compact Edition?
I would recommend Sqlite. It's completely self-contained, and public domain so there are no license issues at all.
Single user or multi user?
For single user, the answer would be SQLite
For multi user (or multithread), try MySQL or PostgreSQL.
Since your requirement is a windows based application i would suggest that you go with sql server 2005 express edition which is a free tool, but with certain small limitations. you can upgrade to a bigger version when you go with a paid version.
There are other DB engines like SQL Lite or FireBird, choose them if the support and growth options they provide are good enough for you
Additionally, Visual Basic is eof lifed. VB.NET might be a better windows based platform currently. It would give a better platform / features to start with and when you want to expand the talent you have working on the project, i assume .NET talent might be more available than programmers who want to work with a dead language.
duplicate of What options are there for a quick embedded DB in .NET?
I'll repeat my answer from there:
"Or theres Esent, the built in database that exists in every copy of windows. Read about it here: http://ayende.com/Blog/archive/2008/12/23/hidden-windows-gems-extensible-storage-engine.aspx" and http://www.codeplex.com/ManagedEsent
SQLite will work for a local desktop application. If you want several users, a few gigas of data, and multiple connections I would use mysql or Firebird.
http://www.mysql.com/
http://www.firebirdsql.org/
FireBird SQL server will be thing of choice. It can be used in both embedded and multiuser mode like traditional databases. It implements many of the SQL standards and has strong community base. It is available for Windows, Linux, Solaris, OS X, HP-UX
As mentioned, SQLite is a great single-user database. This page has VB/SQLite examples. Once concerns is that SQLite parses foreign key constraints, but does not enforce them. You can use this code to generate "foreign key triggers" for SQLite, thus gaining an easy to use database with FK constraints.
Depending on how demanding your database needs are, though, you might want to consider MS Access.
I used SQL Server Compact Edition. It's like sqllite. A single SDF file accessed using ADO.NET.
You can develop your application using Visual Basic .NET and manage you database (add tables, columns, constraints, etc...) using Visual Studio.
SQLite may be what you are looking for. http://www.sqlite.org/
Depending on your needs for the application.
You could use SQLLite which is a very nice database with no installation required.
You could also use Microsoft SQL Server: SQL Server Compact 3.5.
Both are free!
It's not quite clear from your post whether you want a web application or not.
For a web application, MySQL works effectively on the Windows platform. You also have nearly limitless options for development environment including, PHP, Ruby on Rails, Django, and .Net.
If you are looking at a desktop application, MS Access might be suitable ... incredible easy for simple applications.
Well, assuming you don't have any prior experience...
You need some kind of persistence storage (for example a database) and a client.
For the storage you could use almost anything. For example you could create your DB in MS Access and just ship it as a file, using ADO to access it.
Other options are MS SQL Express edition (comes pre-installed on some machines or could be installed for free) and plenty of open source databases like SQLite
For the client side you could not go wrong with VBScript and ADO (using OLE DB drivers). They come with every Windows installation since Dark Ages, you will have plenty of references/tutorials/answers online.
A drawback: no UI to speak of, so you'll have to build a command line interface (which was for a 'simple' application).
If you want to build a UI I would suggest using .NET WinForms. The overhead will be substantially bigger but .NET is now installed on all XP/Vista machines and even if it is not you could always install the framework with you application.
If you want to build application that can move to other pc easily,I prefer Microsoft Access it is small database easy to use and no need to install.It suites for application like Addressbook,mini crud system.
But if you want to develop enterprise database system you should use MySQL instead.
I do not understand what you mean with "independence form [...] installed software". You ever need at least the DBMS installed as well as one client or user interface.
I recommend using MS Access. It is easy and cheap for simple, single user tasks and rapid prototyping development. Only development version have to be bought ("normal" Access) to create DBs. Runtime version of Access 2007 can be downloaded free of cost from Microsoft Homepage - for using only the database you created.
Also it combines DBMS and GUI frontend in same tool.
Dare I mention MS Access...?
If you are looking for small footprint (up to a few MB) and easy deployment (end-user should only install your application to get it working), then your options are SQLite and Firebird embedded.
Of those two, I'd pick Firebird any time, because of it's full support for SQL (you can't, for example, drop a column in SQLite), ACID compliance, and ability to go client/server without any changes (just change the connection string from embedded to server) to the code if you ever decide to let multiple users work on the same database.
Not to mention that you can use full server to develop (which means your application and database administration tool can be connected to database at the same time).
I'm successfully using Turbo Delphi (free for commercial and no commercial use) + ZeosLib (zeos.firmos.at).
The only things you need to distribute with your .exe are the database client dlls (no need to install the client, just put the dlls in the same directory).
Would Kexi work?
I can recommend from personal experience "My Visual database"
free, no code, no sql, just drag and drop.
http://myvisualdatabase.com/
Best Option would be to create a Win32 native application using Delphi and use SQLLite as the database.
Reason being Delphi can produce native win32 applications without any other product being installed on the machine.

Resources