我尝试过使用继承DataContext.createDatabase()的类创建新数据库,也尝试过StackExchange post中的方法,但都导致抛出相同的异常并进行类似的跟踪。我安装了SQL Server2008,但我从未使用过它,所以完全有可能我没有配置一些基本的东西。
我所尝试的:
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();
}
}
}
动态创建。mdf/.sdf数据库
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`1wrapCloseInAction)
在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,Boolean breakConnection,Action`1wrapCloseInAction)
在System.Data.SQLClient.TDSparser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)
在System.Data.SqlClient.Tdsparser.TryRun(RunBehavior RunBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean&;dataReady)
在System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTDS(String methodName,Boolean async,Int32 timeout,Boolean asyncWrite)
在System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery处(TaskCompletionSource`1完成,String methodName,Boolean sendToPipe,Int32超时,Boolean asyncWrite)
在System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
在sandbox.program.createSQLDatabase(字符串文件名)
在sandbox.program.main(字符串[]参数)
显然,在创建DataContext对象时需要指定完整的文件路径。仅仅使用“mydvds.mdf”是不够的。