The thing is do not deploy the setup along with a database file. First let us talk about installer, in .NET framework you can use
Installer
[
^] class to
run custom install functionality on Windows. This class would allow you to run Install or Uninstall function, in which you can manage how to deploy the files, and how to remove the files from the system. Including databases and other system required library files to run the application.
If you look at the MSDN document, you will see that they have provided an example in which you actually inherit the Installer class and use your own logic. .NET framework won't prevent you from doing anything while your
Install
function is executing. You can surely deploy SQL databases, transfer required (.dll) libraries and many more such functions.
A good approach would be to check whether application is able to run or not. Whether machine supports the frameworks, if it does, then install those frameworks first.
Now, a consideration as to why not share the SQL database backup file with the client is that you do not know until now what are the features of their machine. Do they have SQL server installed, would it allow your application to run that server, would it even run that back up file to get the data? Many such conditions.
It is better, to create a new database on the client's machine, if they have SQL Server instance. .NET framework also needs you to make sure that the assemblies are available for your application.
If you still need to deploy the database back up file, then first install SQL Server on the machine.