Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态创建.mdf数据库时文件激活错误_C#_.net_Sql Server_Linq To Sql - Fatal编程技术网

C# 动态创建.mdf数据库时文件激活错误

C# 动态创建.mdf数据库时文件激活错误,c#,.net,sql-server,linq-to-sql,C#,.net,Sql Server,Linq To Sql,我尝试过使用继承DataContext.CreateDatabase()的类创建新数据库,还尝试过StackExchange post中的方法,但这两种方法都会导致引发相同的异常并进行类似的回溯。我已经安装了SQLServer2008,但我从未使用过它,所以完全有可能我没有基本的配置 我所尝试的: 异常和跟踪: System.Data.SqlClient.SqlException:发生文件激活错误。 物理文件名“testdb.mdf”可能不正确。诊断和 请更正其他错误,然后重试该操作。创建数据

我尝试过使用继承DataContext.CreateDatabase()的类创建新数据库,还尝试过StackExchange post中的方法,但这两种方法都会导致引发相同的异常并进行类似的回溯。我已经安装了SQLServer2008,但我从未使用过它,所以完全有可能我没有基本的配置

我所尝试的:

异常和跟踪:

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

在System.Data.SqlClient.SqlConnection.OnError(SqlException异常, 布尔断开连接,操作'1 wrapCloseInAction)

位于System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔断开连接,操作'1 wrapCloseInAction)

在 System.Data.SqlClient.TdsParser.ThroweException和Warning(TdsParserStateObject stateObj、布尔调用方连接锁、布尔异步关闭)

在System.Data.SqlClient.TdsParser.TryRun(运行行为, SqlCommand cmdHandler、SqlDataReader数据流、, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj、Boolean和dataReady)

位于System.Data.SqlClient.SqlCommand.RunExecuteOnQueryTds(字符串 methodName、布尔异步、Int32超时、布尔异步写入)

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

位于System.Data.SqlClient.SqlCommand.ExecuteOnQuery()处

位于sandbox.Program.CreateSqlDatabase(字符串文件名)

位于sandbox.Program.Main(字符串[]args)


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

它显然也必须是一条绝对路径,因为在我将“\mydvds.mdf”改为“C:\temp\mydvds.mdf”之前,“\mydvds.mdf”不起作用。
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();
        }
    }
}
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();
        }
    }
}