尝试使用 SMO C# 创建数据库时抛出异常

Exception thrown trying to create a DB with SMO C#

我正在尝试使用 SMO 创建数据库。我在 Create():

上得到这个异常

Microsoft.SqlServer.Management.Smo.FailedOperationException: Create failed for Database 'DataBase.t'. ---> Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Transact-SQL statement or batch. ---> System.Data.SqlClient.SqlException: A file activation error occurred. The physical file name 'Resources\DataBase.t.mdf;' may be incorrect. Diagnose and correct additional errors, and retry the operation. CREATE DATABASE failed. Some file names listed could not be created. Check related errors. at Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction action, Object execObject, DataSet fillDataSet, Boolean catchException) at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType) --- End of inner exception stack trace --- at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType) at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(StringCollection sqlCommands, ExecutionTypes executionType) at Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery(StringCollection queries) at Microsoft.SqlServer.Management.Smo.SqlSmoObject.ExecuteNonQuery(StringCollection queries, Boolean includeDbContext) at Microsoft.SqlServer.Management.Smo.SqlSmoObject.CreateImplFinish(StringCollection createQuery, ScriptingPreferences sp) at Microsoft.SqlServer.Management.Smo.SqlSmoObject.CreateImpl() --- End of inner exception stack trace --- at Microsoft.SqlServer.Management.Smo.SqlSmoObject.CreateImpl() at Microsoft.SqlServer.Management.Smo.Database.Create() at CustomSQLConnectionTest.Program.Main(String[] args) in d:\Visual Studio 2013\Projects\DatabaseCreationTest\DatabaseCreationTest\Program.cs:line 58

我尝试了很多解决方案,但没有任何效果。我 运行 VS 作为管理员,SQL Server Management Studio 也是,我设置了所有用户的权限。我还尝试 运行 在 SSMS 中使用我的目录进行此查询,它确实有效:

USE [master]
GO
/****** Object:  Database [bioenergiasIpad]    Script Date: 08/07/2012 17:01:19 ******/
CREATE DATABASE [test1] ON  PRIMARY 
( NAME = N'test1', 
  FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1.mdf', 
  SIZE = 70656KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB)
 LOG ON 
( NAME = N'test1_log', 
  FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1_log.ldf', 
  SIZE = 164672KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO

此处来源

我的代码是:

Console.WriteLine("Enter username");
string UserName = Console.ReadLine();
Console.WriteLine("Enter password");
string Password = Console.ReadLine();

string connectionString = null;
SqlConnection cnn ;

Server server = new Server();
server.ConnectionContext.LoginSecure = true;

try
{
    connectionString = @"Data Source=" + server.Name + @"\Administrator" +
                            @"AttachDbFilename=|DataDirectory|Resources\DataBase." + UserName + ".mdf;" +
                             "Integrated Security=True;";

    Database database = new Database(server, "DataBase." + UserName);
    database.FileGroups.Add(new FileGroup(database, "PRIMARY"));

    DataFile dtPrimary = new DataFile(database.FileGroups["PRIMARY"], "PriValue", @"Resources\DataBase." + UserName + ".mdf;");
    dtPrimary.Size = 77.0 * 1024.0;
    dtPrimary.GrowthType = FileGrowthType.KB;
    dtPrimary.Growth = 1.0 * 1024.0;

    database.FileGroups["PRIMARY"].Files.Add(dtPrimary);

    LogFile logFile = new LogFile(database, "Log", @"Resources\DataBase." + UserName + ".ldf");
    logFile.Size = 7.0 * 1024.0;
    logFile.GrowthType = FileGrowthType.Percent;
    logFile.Growth = 10.0;

    database.LogFiles.Add(logFile);

    database.Create();
    database.Refresh();
}

我尝试了不同的连接字符串。

哦,我正在使用 SQL Server 2012。

我做错了什么?

我认为您正在尝试创建一个全名 'Resources\DataBase.t.mdf;' 的文件。尝试像您那样提供一些正确的名称 SQL 示例,例如 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1.mdf' 应该没问题。