如何手动创建一个mdf文件供localdb使用?

时间:2013-04-06 16:40:48

标签: .net visual-studio-2012 localdb

我正在设置一些单元测试来测试数据库完成的工作。我想使用localdb v11,但首先我需要创建数据库。我到底该怎么做?

只需连接到sql management studio中的(localdb)v11即可将我连接到(我假设)位于C:\Users\George\的数据库。如何指定新的?

代码使用手动ADO.Net,而不是实体框架,据我所知,我不能依赖它来简单地创建数据库。

4 个答案:

答案 0 :(得分:43)

只需使用CREATE DATABASE语句

SqlConnection connection = new SqlConnection(@"server=(localdb)\v11.0");
using (connection)
{
    connection.Open();

    string sql = string.Format(@"
        CREATE DATABASE
            [Test]
        ON PRIMARY (
           NAME=Test_data,
           FILENAME = '{0}\Test_data.mdf'
        )
        LOG ON (
            NAME=Test_log,
            FILENAME = '{0}\Test_log.ldf'
        )",
        @"C:\Users\George"
    );

    SqlCommand command = new SqlCommand(sql, connection);
    command.ExecuteNonQuery();
}

答案 1 :(得分:24)

我知道,老问题,但我发现以下方式仍然相关且快速。以下是完整的步骤,但实际上只有最后一部分才真正相关:

先决条件:

  1. MS Sql LocalDb引擎
  2. MS Sql Server Management Studio
  3. 步骤:

    1. 打开命令提示符
    2. 运行SqlLocalDb info以列出当前安装的LocalDb实例。对于Sql Server 2012 / Visual Studio 2012应该至少为v11.0,对于Sql Server 2014 / Visual Studio 2015至少应为MSSQLLocalDB
    3. 打开Sql Server Management Studio,或者如果已经运行
    4. 则显示“连接”对话框
    5. 使用服务器名称(localdb)\v11.0(localdb)\MSSQLLocalDB,无论您感兴趣的是哪个。选择Windows身份验证
    6. 创建新查询
    7. 粘贴以下模板,根据需要调整路径和名称:

      CREATE DATABASE __YourDbName__ ON (
        NAME='__YourDbName__', 
        FILENAME='YourDrive:\Your\path\to\data\files\__YourDbName__.mdf')
      
    8. 运行查询

    9. 刷新对象资源管理器数据库列表
    10. 在对象资源管理器中,您现在应该看到新创建的数据库,而在Windows资源管理器中,您现在应该可以在指定的路径中看到新创建的.mdf.ldf文件。

      HTH

答案 2 :(得分:8)

不确定“手动”是什么意思。我将使用Visual Studio 2013和LocalDb添加一个选项:

打开Server Explorer,右键单击Data Connections,选择Create New SQL Server Database。对于“服务器名称”,请使用“(LocalDB)\ v11.0”。

还有另一个选项,如here所述,但它需要安装SQL Server数据工具。 Visual Studio 2012的说明版本也是available

由于您还提到了SQL Server Management Studio,您只需连接到LocalDb实例并右键单击Databases,然后右键单击Create,这是标准方式。它或多或少是一个常规的SQL Server实例,所有标准操作都将照常运行。

显然,创建数据库也可以从应用程序代码中完成,但这需要设置适当的数据库权限。取决于您的环境,这可能是也可能不是一个好主意。

答案 3 :(得分:5)

如果您正在寻找(像我一样)在代码之外执行此操作的方法,您可能需要考虑使用.bat脚本来执行此操作。我将它作为.txt文件保存在解决方案中,当我需要再次设置开发环境时,我可以使用它。

LocalDB和SQLCmd

此脚本假设已安装LocalDB。我还没有找到关于它的明确信息,但如果您使用的是实体框架,它似乎可以与visual studio 2012和2015一起安装。如果不是这种情况,您可以从独立安装程序或SQL Server Express下载页面安装它(您可以选择它作为您想要的下载。更多详细信息:How to install localdb separately?

可以从SQLServer Feature Pack以相同的方式下载SQLCmd,查找SQLCmdlnUtility.msi。以下是2012版的link

如果您的版本与我不同,则可能需要更改LocalDbDir和SQLCmdDir路径。

脚本

:: Script to Create Local DB Instance and a database

::echo setting variables - Default Server is v11 but it may be useful to evolve in a server instance of your own...
SET localdDbDir=C:\Program Files\Microsoft SQL Server\120\Tools\Binn
SET sqlCmdDir=C:\Program Files\Microsoft SQL Server\120\Tools\Binn
SET SRV_NAME=your-dev-srv
SET DB_NAME=your-dev-db
SET DB_PATH=C:\CurDev\Temp

echo Creates the localDB server instance
pushd "%localdDbDir%"
:: uncomment those lines if you want to delete existing content
::SqlLocalDb stop %SRV_NAME%
::SqlLocalDb delete %SRV_NAME%
SqlLocalDb create %SRV_NAME%
SqlLocalDb start %SRV_NAME%
popd

echo Create the database intance
pushd "%sqlCmdDir%"
sqlcmd -S "(localdb)\%SRV_NAME%" -Q "CREATE DATABASE [%DB_NAME%] ON PRIMARY ( NAME=[%DB_NAME%_data], FILENAME = '%DB_PATH%\%DB_NAME%_data.mdf') LOG ON (NAME=[%DB_NAME%_log], FILENAME = '%DB_PATH%\%DB_NAME%_log.ldf');"
popd
echo completed

希望这有帮助!