DataContext.CreateDatabase()表示文件已经存在 – 但事实并非如此

这可能是Windows 7问题,但是调用

using (var context = new DataClassesDataContext()) { if (!context.DatabaseExists()) { context.CreateDatabase(); } } 

导致以下错误:

System.Data.SqlClient.SqlException未处理Message = Database’C:\ Temp \ SmallBusinessManager.mdf’已存在。 选择其他数据库名称。 Source = .Net SqlClient Data Provider ErrorCode = -2146232060 Class = 16 LineNumber = 1 Number = 1801 Procedure =“”
Server = \。\ pipe \ 952FCA9D-B4B6-4C \ tsql \ query State = 3 StackTrace:在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException)的System.Data.SqlClient.SqlConnection.OnError(SqlExceptionexception,Boolean breakConnection)处System.Data.SqlClient上System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)的System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()处理exception,布局breakConnection)。 System.Data.SinCl.SqlClient上System.Data.SqlClient.SqlCommand.ExecuteNonQuery()的System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult结果,String methodName,Boolean sendToPipe)中的SqlCommand.RunExecuteNonQueryTds(String methodName,Boolean async) System.Data.Linq.DataContext.CreateDatabase()上的System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.CreateDatabase()中的.sqlProvider.ExecuteCommand(String命令)

但是我删除了数据库文件。 可能是什么导致了这个? 这些文件真的存在但是以某种方式隐形吗? 与路口有什么关系?

抓取进程监视器 ,您将能够看到文件操作及其失败的原因。 我发现这通常是解决问题根源的最佳和最快捷方式。 这是一个很好的实用工具。

跟踪错误

所以我也一直试图通过运行DataContext.CreateDatabase()命令来创建一个基于文件的数据库(名为C:\ y \ bjdatamig \ IntermediateData.mdf )并得到相同的错误。

我在Vista SP2上使用SQLExpress 2008和VS2008,并使用Process Monitor作为Josh在他的答案中提出的建议。 这导致我看到SQL Server正在写入其error.log文件,该文件又显示了以下相关信息块(如果其他人在消息中看到有用的内容,则提供完整内容):

 2010-06-23 17:04:10.50 Server SQL Server is starting at normal priority base (=7). This is an informational message only. No user action is required. 2010-06-23 17:04:10.50 Server Detected 2 CPUs. This is an informational message; no user action is required. 2010-06-23 17:04:10.55 Server Perfmon counters for resource governor pools and groups failed to initialize and are disabled. 2010-06-23 17:04:10.55 Server Using dynamic lock allocation. Initial allocation of 2500 Lock blocks and 5000 Lock Owner blocks per node. This is an informational message only. No user action is required. 2010-06-23 17:04:10.65 Server Node configuration: node 0: CPU mask: 0x00000003 Active CPU mask: 0x00000003. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required. 2010-06-23 17:04:10.69 spid7s Starting up database 'master'. 2010-06-23 17:04:10.79 spid7s 1 transactions rolled forward in database 'master' (1). This is an informational message only. No user action is required. 2010-06-23 17:04:10.91 spid7s 0 transactions rolled back in database 'master' (1). This is an informational message only. No user action is required. 2010-06-23 17:04:10.91 spid7s Recovery is writing a checkpoint in database 'master' (1). This is an informational message only. No user action is required. 2010-06-23 17:04:11.12 spid7s Error: 5598, Severity: 16, State: 2. 2010-06-23 17:04:11.12 spid7s FILESTREAM feature is not supported on user instances. 2010-06-23 17:04:11.12 spid7s FILESTREAM: effective level = 0, configured level = 0, file system access share name = 'SQLEXPRESS'. 2010-06-23 17:04:11.25 spid7s SQL Trace ID 1 was started by login "sa". 2010-06-23 17:04:11.31 spid7s Starting up database 'mssqlsystemresource'. 2010-06-23 17:04:11.33 spid7s The resource database build version is 10.00.2531. This is an informational message only. No user action is required. 2010-06-23 17:04:11.90 spid9s Starting up database 'model'. 2010-06-23 17:04:11.91 Server Server local connection provider is ready to accept connection on [ \\.\pipe\95B6C915-3DB7-46\tsql\query ]. 2010-06-23 17:04:11.94 Server Dedicated administrator connection support was not started because it is disabled on this edition of SQL Server. If you want to use a dedicated administrator connection, restart SQL Server using the trace flag 7806. This is an informational message only. No user action is required. 2010-06-23 17:04:11.95 spid7s Server name is 'JOHN-W500\95B6C915-3DB7-46'. This is an informational message only. No user action is required. 2010-06-23 17:04:12.22 spid7s Starting up database 'msdb'. 2010-06-23 17:04:12.27 Server The SQL Server Network Interface library could not register the Service Principal Name (SPN) for the SQL Server service. Error: 0x5, state: 4. Failure to register an SPN may cause integrated authentication to fall back to NTLM instead of Kerberos. This is an informational message. Further action is only required if Kerberos authentication is required by authentication policies. 2010-06-23 17:04:12.27 Server SQL Server is now ready for client connections. This is an informational message; no user action is required. 2010-06-23 17:04:12.60 spid9s Clearing tempdb database. 2010-06-23 17:04:15.49 spid9s Starting up database 'tempdb'. 2010-06-23 17:04:16.27 spid12s The Service Broker protocol transport is disabled or not configured. 2010-06-23 17:04:16.27 spid12s The Database Mirroring protocol transport is disabled or not configured. 2010-06-23 17:04:16.36 spid12s Service Broker manager has started. 2010-06-23 17:04:16.37 spid7s Recovery is complete. This is an informational message only. No user action is required. 2010-06-23 17:04:17.84 Logon Error: 15350, Severity: 16, State: 1. 2010-06-23 17:04:17.84 Logon An attempt to attach an auto-named database for file C:\y\bjdatamig\IntermediateData.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share. 2010-06-23 17:31:29.89 Logon Error: 15350, Severity: 16, State: 1. 2010-06-23 17:31:29.89 Logon An attempt to attach an auto-named database for file C:\y\bjdatamig\IntermediateData.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share. 2010-06-23 17:33:07.09 Logon Error: 15350, Severity: 16, State: 1. 2010-06-23 17:33:07.09 Logon An attempt to attach an auto-named database for file C:\y\bjdatamig\IntermediateData.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share. 2010-06-23 17:49:53.53 Logon Error: 15350, Severity: 16, State: 1. 2010-06-23 17:49:53.53 Logon An attempt to attach an auto-named database for file C:\y\bjdatamig\IntermediateData.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share. 2010-06-23 18:01:02.74 Logon Error: 15350, Severity: 16, State: 1. 2010-06-23 18:01:02.74 Logon An attempt to attach an auto-named database for file C:\y\bjdatamig\IntermediateData.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share. 2010-06-23 18:02:50.92 Logon Error: 15350, Severity: 16, State: 1. 2010-06-23 18:02:50.92 Logon An attempt to attach an auto-named database for file C:\y\bjdatamig\IntermediateData.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share. 2010-06-23 18:04:06.31 Logon Error: 15350, Severity: 16, State: 1. 2010-06-23 18:04:06.31 Logon An attempt to attach an auto-named database for file C:\y\bjdatamig\IntermediateData.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share. 2010-06-23 18:06:41.22 Logon Error: 15350, Severity: 16, State: 1. 2010-06-23 18:06:41.22 Logon An attempt to attach an auto-named database for file C:\y\bjdatamig\IntermediateData.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share. 

我的SQL日志文件位于:

 C:\Users\John\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS\error.log 

重要的是,对于我的情况,它表示用户实例不支持“function”,似乎是关于流式传输文件,当然CreateDatabase正在尝试写入文件系统…

 2010-06-23 17:04:11.12 spid7s Error: 5598, Severity: 16, State: 2. 2010-06-23 17:04:11.12 spid7s FILESTREAM feature is not supported on user instances. 

… APP.CONFIG中的我的连接字符串也指定了“用户实例”…

  

我改变了我的连接字符串

 ;Integrated Security=True; 

 ;Integrated Security=False; 

数据库是在文件系统上创建的。

为什么我不必更改“用户实例”选项? 好吧,我不确定。 事实上,在我开始得到这个错误之前,代码工作,但我没有在一个月内尝试过 – 我猜测可能是系统更新或更改SQL Server导致它。 因此虽然已经修复,但仍然有点神秘。

您需要删除以下文件夹并重新启动计算机才能删除旧的用户实例。 如果声明文件正在使用时出错,您可以通过Process Explorer “关闭”它们。

对于XP:

 C:\Documents and Settings\username\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS 

对于Vista:

 C:\Users\username\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS 

有关用户实例的技术详细信息,请阅读标题为“SQL Server 2005 Express Edition用户实例”的文章。