缺少SQL Server事务日志(.ldf)文件的谜团

时间:2012-06-20 01:25:29

标签: c#-4.0 sql-server-2005-express

我刚刚完成了使用SQL Server 2005 Express的C#2010 Windows桌面应用程序的开发。

我把它交给同事测试他的Windows 7(64位)笔记本电脑。

程序在第一天按预期运行,将数据库连接到SQL Server Express的本地实例,当它使用如下连接字符串进行第一次数据库调用时:

Server=.\SQLExpress;AttachDbFilename=|DataDirectory|MyDB.mdf;Database=MyDB;integrated security=true;user instance=true;

第二天,当他运行该程序时失败,出现以下异常:

  

System.Data.SqlClient.SqlException(0x80131904):无法打开数据库" MyDB"登录请求。登录失败。
  用户登录失败' Tack-PC \ Tack'。
  文件激活失败。物理文件名" C:\ Program Files(x86)\ MyCo \ MyApp \ MyDB_log.LDF"可能不正确。
  当主文件是只读文件时,无法重建日志   在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException   exception,Boolean breakConnection)
  在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
  在System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,   BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject   stateObj)
  在System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(布尔值   enlistOK)
  在System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo   serverInfo,String newPassword,Boolean ignoreSniOpenTimeout,   TimeoutTimer超时,SqlConnection拥有对象)
  在System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo   serverInfo,String newPassword,Boolean redirectedUserInstance,   SqlConnection owningObject,SqlConnectionString connectionOptions,   TimeoutTimer超时)
  在System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection   owningObject,TimeoutTimer超时,SqlConnectionString   connectionOptions,String newPassword,Boolean redirectedUserInstance)
  在System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity   identity,SqlConnectionString connectionOptions,Object providerInfo,   String newPassword,SqlConnection owningObject,Boolean   redirectedUserInstance)
  在System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions   options,Object poolGroupProviderInfo,DbConnectionPool池,   DbConnection owningConnection)
  在System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection)   owningConnection,DbConnectionPool池,DbConnectionOptions选项)
  在System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection   owningObject)
  在System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection)   owningObject)
  在System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection   owningObject)
  在System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection   owningConnection)
  在System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection   outerConnection,DbConnectionFactory connectionFactory)
  在System.Data.SqlClient.SqlConnection.Open()
  at MyApp.DataGateway.getTable(String sql)
  在MyApp.frmMain.InitialiseList()
  at MyApp.frmMain.frmMain_Load(Object sender,EventArgs e)
  在System.Windows.Forms.Form.OnLoad(EventArgs e)
  在System.Windows.Forms.Form.OnCreateControl()
  在System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
  在System.Windows.Forms.Control.CreateControl()
  在System.Windows.Forms.Control.WmShowWindow(Message& m)
  在System.Windows.Forms.Control.WndProc(Message& m)
  在System.Windows.Forms.ScrollableControl.WndProc(Message& m)
  在System.Windows.Forms.Form.WmShowWindow(Message& m)
  在System.Windows.Forms.Form.WndProc(Message& m)
  在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(消息& m)
  在System.Windows.FormsControl.ControlNativeWindow.WndProc(消息& m)
  在System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)

我还注意到SQL Server在第一次附加数据库后创建的日志文件(.ldf)丢失了。

有没有人知道为什么或如何消失?

我在阅读这个例外时所做的第一件事就是(我知道有点笨拙,但我只是想让他恢复正常运行,而他仍然可以花时间为我测试,我可以并行研究这个问题)为所有用户提供工作文件夹的完全权限,因此它至少可以创建一个新的日志文件。

这导致程序成功运行,但他在第一天输入的所有数据都没有消失。

有人可以为我阐明这种情况吗? 为什么日志文件消失了?

虽然我们在这,但为什么所有的数据都丢失了?它不在mdf文件中,它仍然存在吗?

0 个答案:

没有答案