This is more straightforward than trying to use sqlite, and sqlserverce has been deprecated
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlClient; namespace test_create_database_as_mdf_file { public partial class Form1 : Form { SqlConnection conn; public void CreateSqlDatabase(string filename) { string databaseName = System.IO.Path.GetFileNameWithoutExtension(filename); conn = new SqlConnection(@"Data Source=(LocalDB)\v11.0;Initial Catalog=master;Integrated Security=True"); conn.Open(); using (var command = conn.CreateCommand()) { command.CommandText = String.Format("CREATE DATABASE {0} ON PRIMARY (NAME={0}, FILENAME='{1}')", databaseName, filename); command.ExecuteNonQuery(); command.CommandText = String.Format("EXEC sp_detach_db '{0}', 'true'", databaseName); command.ExecuteNonQuery(); } /* The code above does the work inside 'master' catalog. If I use this same connection to create tables they also are created there, so now that the database has been created and detached, it must be re-attached to then create tables and such, and use it...*/ conn = new SqlConnection(String.Format(@"Data Source=(LocalDB)\v11.0;Integrated Security=True;AttachDbFilename={0}",filename)); conn.Close(); } public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { CreateSqlDatabase(openFileDialog1.FileName); } } private void button2_Click(object sender, EventArgs e) { conn.Open(); SqlCommand comm = conn.CreateCommand(); comm.CommandText = "create table mytable (id int, name nvarchar(100))"; comm.ExecuteNonQuery(); comm.CommandText = "insert into mytable (id,name) values (10,'testing')"; comm.ExecuteNonQuery(); comm.CommandText = "select * from mytable"; SqlDataReader reader = comm.ExecuteReader(); while (reader.Read()) { textBox1.Text += reader["id"].ToString() + ", " + reader["name"].ToString() + "\r\n"; } conn.Close(); } } }