【问题标题】:File activation error when dynamically creating .mdf database动态创建 .mdf 数据库时文件激活错误
【发布时间】:2015-06-09 21:37:54
【问题描述】:

我尝试使用继承 DataContext.CreateDatabase() 的类创建新数据库,并且还尝试了 StackExchange 帖子中的方法,但两者都导致抛出相同的异常并具有类似的回溯。我安装了 SQL Server 2008,但我从未使用过它,所以完全有可能我没有配置基本的东西。

我尝试过的:

https://msdn.microsoft.com/en-us/library/bb399420(v=vs.110).aspx

using System;
using System.Data.Linq;
using System.Data.Linq.Mapping;
namespace sandbox
{
    public class MyDVDs : DataContext
    {
        public Table<DVD> DVDs;
        public MyDVDs(string connection) : base(connection) { }
    }

    [Table(Name = "DVDTable")]
    public class DVD
    {
        [Column(IsPrimaryKey = true)]
        public string Title;
        [Column]
        public string Rating;
    }
    class Program
    {
        public static void Main(string[] args)
        {
            MyDVDs db = new MyDVDs("mydvds.mdf");
            db.CreateDatabase();
        }
    }
}

Create .mdf/.sdf database dynamically

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

异常与追踪:

System.Data.SqlClient.SqlException:发生文件激活错误。 物理文件名“testdb.mdf”可能不正确。诊断和 更正其他错误,然后重试该操作。创建数据库 失败的。无法创建列出的某些文件名。检查相关 错误。

在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常, Boolean breakConnection, Action`1 wrapCloseInAction)

在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔型 breakConnection,Action`1 wrapCloseInAction)

在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)

在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler、SqlDataReader 数据流、 BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady)

在 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(字符串 methodName, Boolean async, Int32 timeout, Boolean asyncWrite)

在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 完成,字符串方法名,布尔型 sendToPipe,Int32 超时, 布尔异步写入)

在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()

在 sandbox.Program.CreateSqlDatabase(String filename)

在 sandbox.Program.Main(String[] args)

【问题讨论】:

    标签: c# .net sql-server linq-to-sql


    【解决方案1】:

    显然在创建 DataContext 对象时需要指定完整的文件路径。仅仅使用“mydvds.mdf”是不够的。

    【讨论】:

    • 它显然也必须是绝对路径,因为“.\mydvds.mdf”在我将其更改为“C:\temp\mydvds.mdf”之前无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多