Implementar la base de datos junto con el proyecto

I need to create an application that does the following:

  • The application is going to be installed on multiple computers on the same network

  • There is going to be a computer that contains the database other computers will connect to that database. (So there is a server version of the software and a client version)

  • All the computers that have the application installed should be able to do CRUD (create, read,...) operations in the database.

  • Database will be small, that is it should be less than 1GB in size.

Problems that I have:

I don't know which database to use:

  • SQLite - From researching on the internet this seems like a great database. It is fast, very easy to deploy . The problem is that from researching I think it is not that good handling multiple connections. When I say multiple I mean 5 computers using the database simultaneously.

  • MySQL - I work with this database and I know it is great handling multiple connections. The problem with that database is that I don't know how I will be able to deploy that database. I am required to deploy a database when installing the software. I know that if I require the users to instal MySQL doing a separate installation that will work. Maybe there is a way of deploying MySQL when doploying a project in visual studio.

  • SQL Server Express - I believe this will be my best option. I have researched on the internet and I found out that it is possible to deploy a SQL Server Express database with a application. I believe it will be easy to figure out how to deploy such database with a project but it will be nice if someone can point me on the right direction on how to connect to that database remotely from a computer on the same network. The database will obviously be shared in the network in order to achieve this.

  • Microsoft Access Database - I never use this database. I know it can handle multiple connections. Maybe it is a good choice.

It will be nice if someone can point me on the right direction of how to be able to deploy a database when installing my application. Moreover how will I be able to connect to that database from a computer remotely on the same network. Since the database is small and it will just contain text I think that the best idea will be to keep the database on the internet but I cannot do that. The software is required to work without an internet connection.


From looking at your answers it looks like I have to install SQL Server express or MySql on the server computer. The problem is that I am required to do one installation. Is there a way of deploying MySql or SQL Server Express when deploying my application. Perhaps I have to embed mysql in the application and make my application install it somehow. My boss want to be able to install the software without having a internet connection.


I been thinking and this part will be very hard to implement. Do you guys have any ideas how QuickBooks implement their database? I guess I need something similar. When you install Quickbooks you perform just one installation. Quick-books handles pretty well simultaneous connections. Do they use their own database? Oracle? MySQL? I agree with all of you. It will be so easy to perform two installations. Also it will be cleaner. The software that I am creating is supposed to run on windows xp, and latter versions of windows.

preguntado el 01 de febrero de 12 a las 22:02

FYI: SQLite is fine with multiple readers. It's multiple writers that require exclusive locking. That may or may not be an issue for your app. -

Yeah there are going to be about 5 computers connected to the database at once. Since I am creating the application, maybe I can restrict writing to the database if one computer is writing to it. -

You don't need to worry about doing the locking yourself. SQLite does it for you. The only downside is performance. Whether that is a problem depends on how much simultaneous writing is going on in your app. -

The way we do it, is we wrote an installer app that knits together msi or exes, so there's sqlserver express (if required), patches, .net, our app, pdf printer, set up event sources. It copes with probing for hard ware and software, intermediate reboots and such. It's a hefty amount of work though... -

4 Respuestas

If you want a dbms as your backend you are installing two things, It could look to the user like one thing, but I can tell you from bitter experience, that can be a lot of fun.

For instance to install 2005/ 2008 express, there are various prerequisites. Like a .net framework. Then there's patches and updates, then opening up the firewall(s), depends on set up. Different topology / os choices. Peer to peer, domain based, Active directory, Terminal Services, citrix. So automagically installing without an internet connection, and using the installer for the db, is nigh on impossible, unless you have rigid control over the user environments.

Welcome to a world of hurt.

Oh did I mention permissions, shares, UAC, 32/64 bit (for sql server dmo and smo, maybe)

Do you want to block installs on "incompatible" environments.

Oh and what about upgrades. To the db, to your apps. What if your client already has a server install and doesn't want to clutter up their kit with another...

y muchos muchos más.

And I bet you just can't wait to test all the potential combinations.

You haven't said what your target environments are going to be, so I can't say how many worms are in the tin, but its's very big time with plenty of room for lots of worms. Ours is a long running legacy app, so we are pretty much snookered, I'd never willingly start with this design again though. Locally deployed web app would take a lot of the pain out of it.

Go back and scare the crap out of your boss.

Respondido 02 Feb 12, 03:02

I agree with you. Maybe I will go with SQLite for that reason. You made me thing about so many things with your answer. I will write yet another edit on my question. Take a look at it. Thanks for the help. - Tono Nam

I would recommend Sql Server Express installed on a server on your network. Microsoft Access doesn't handle multiple simultaneous connections very well and is not very efficient when accessed from a remote machine.

You don't need to worry about deploying the database with your client application, you can install Sql Server Express directly on the server. (This only needs to be done once). You will need to configure Sql Server Express to accept remote connections after it is installed on the server.

Respondido 02 Feb 12, 02:02

Yeah that is what I thought. I use MySQL and I know that if I install that database in the server computer and configure the database I will be able to access that database from the the remote computers by knowing it's ip. The problem is that I am required to instal one thing. my boss does not want to do 2 installations. Maybe I can embed MySqlServer express in the application - Tono Nam

Agree with Tony Hopkinson, if you have a backend db and client application, you are installing 2 completely different things. It is possible to make it look like there is a single installer. What is the reasoning behind the requirement for a single installer? Will this system be installed at multiple client sites, or is it an in-house only system? If in-house only, the single installer requirement is difficult to justify. - JSR

Cause my boss want the application to be easy to install like quickbooks. Even if I manage to deploy the second installation of SQL express then I will have to configure it's settings so that it can accept remote connections. I'll keep trying. This is harder than I though. - Tono Nam

It's only going to be easy to install in the scenarios you code for, the others they are going to be much harder to impossible. Stuff as simple as having enough disk space, which one of their hard drives/partitions was it installed on. Tell your boss you are meant to be solving problems not causing them. - Tony Hopkinson

SQLexpress supports multiple connections. So if you attach database on "server" computer you can than connect from clients same way as you would to local database.(provided those computers are in LAN or VPN).

Respondido 02 Feb 12, 02:02

Several articles on the Internet mention that SQLite is not that good handling multiple connections if all the connections are writing to the same database. I finally managed to deploy my application with SQL Server 2008 express. I also deployed my application with SQLite (downloaded the latest version for .NET framework 4). Since I plan to use this database just on a local network (LAN) I gave SQLite a try. I was impressed on how efficient SQLite was. I tested the Database by connecting with 4 computers symoltaniously and constantly writing data (inserts) to the database. No data was lost. When I did this with SQL express it was also very efficient and I could not tell a obvious difference. Maybe you get to see a real difference once there are 50 computers connected like on a web server for example.

Other nice things about SQLite are that it does not take time to deploy. Also there are no heavy services constantly running. I guess that SQLite is a better choice than SQL express. Moreover SQLexpress will only use 1 CPU and the database is limited to 2GB.

I am going to mist the Linq to SQL classes thought. They where very easy to implement with SQL Server Express. So in short I think that every database is good at something. And in this scenario I guess SQLite was a better option for me and for the users.

P.S. I am interested in seeing how SQLite lattest version will hanle multiple connections compared to SQLexpress. I will try to test soon with more computers and each computer running multiple threads, each thread performing an insert in the database. maybe I,ll see a big difference with that scenario.

Respondido 05 Feb 12, 14:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.