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

时间:2012-05-07 12:14:02

标签: c# sql-server database sql-server-ce dynamically-generated

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

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

ConnectionString的所有功能都失败了。由于在创建之前我没有连接到存在的文件,我怎么才能只创建一个mdf / sdf数据库来连接到SQL Express服务器?

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

有什么建议吗?

7 个答案:

答案 0 :(得分:19)

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);
}

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我认为ConnectionString中的问题。它应该指向 master db的有效实例(如您引用的文章中所述)。确保它是正确的,它应该工作。

答案 5 :(得分:0)

将connectionString与InitialCatalog = master一起使用。由于只有master具有创建数据库的默认权限。

答案 6 :(得分:0)

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