我刚刚完成了使用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文件中,它仍然存在吗?