动态创建.mdf / .sdf数据库

如何使用“代码”创建一个新的.mdf / .sdf数据库?

我试过这个: http : //support.microsoft.com/kb/307283

所有这一切都是在ConnectionString上失败的。 由于在创建之前我没有与存在的文件的连接,我怎么才能只创建一个mdf / sdf数据库来连接到SQL Express Server?

我希望能够只连接到服务器并创建文件,从那里可能更容易创建表等。

有什么建议?

public static void CreateSqlDatabase(string filename) { string databaseName = System.IO.Path.GetFileNameWithoutExtension(filename); using (var connection = new System.Data.SqlClient.SqlConnection( "Data Source=.\\sqlexpress;Initial Catalog=tempdb; Integrated Security=true;User Instance=True;")) { connection.Open(); using (var command = connection.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(); } } } 

Catalog=tempdb更改为Catalog=master ,它的效果很好

样品用途:

 var filename = System.IO.Path.Combine("D:\\", "testdb.mdf"); if (!System.IO.File.Exists(filename)) { CreateSqlDatabase(filename); } 

关于.sdf文件(SQL Server CE),您可以使用SqlCeEngine类创建新数据库,如本MSDN文章中所述 。

确保您有一个有效的连接字符串。

您需要的数据库/目录必须设置为有效的数据库,通常这可以是始终可用的“主”,因为您将使用master来创建数据库。

如果您需要以编程方式从头开始创建数据库,我通常会进入SQL Server Management Studio并在第一步中通过gui创建它。 但是,不是单击右下角的“确定”按钮,而是单击顶部工具栏中的“脚本”按钮。 这将为我提供一个完整的sql脚本,用于创建我想拥有的数据库。 然后我可以改变脚本并动态更改我想要的部分。

我想问题出在ConnectionString中。 它应该指向数据库的有效实例(如您引用的文章中所述)。 确保它是正确的,它应该工作。

将connectionString与InitialCatalog = master 。 由于只有master具有创建数据库的默认访问权限。

创建.sdf数据库

 using System.Data.SqlServerCe; using System.IO; string folderPath="D:\\Compact_DB" string connectionString; string fileName =folderPath+"\\School.sdf"; string password = "12345"; if (File.Exists(fileName)) { File.Delete(fileName); } connectionString = string.Format("DataSource=\"{0}\"; Password='{1}'", fileName, password); SqlCeEngine obj_ceEngine = new SqlCeEngine(connectionString); obj_ceEngine.CreateDatabase();