12

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

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

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

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

有什么建议么?

4

7 回答 7

20
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=tempdbCatalog=master效果不错

样品用途:

var filename = System.IO.Path.Combine("D:\\", "testdb.mdf");
if (!System.IO.File.Exists(filename))
{
    CreateSqlDatabase(filename);
}
于 2012-05-07T14:31:58.793 回答
2

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

于 2012-05-07T12:19:40.787 回答
1

创建 .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();
于 2016-04-25T09:59:26.913 回答
0

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

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

于 2012-05-07T12:18:55.870 回答
0

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

于 2012-05-07T12:21:13.263 回答
0

我想问题出ConnectionString 中。它应该指向数据库的有效实例(如您参考的文章中所示)。确保它是正确的,它应该可以工作。

于 2012-05-07T12:21:30.333 回答
0

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

于 2012-05-07T12:24:16.470 回答