动态创建.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();