1

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

我把它交给了一位同事,让他在他的 Windows 7(64 位)笔记本电脑上进行测试。

该程序在第一天按预期运行,当它使用如下连接字符串进行第一次 db 调用时,将数据库连接到 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 异常,布尔型 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(Boolean enlistOK)
在 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, SqlConnection owningObject)
在 System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover (ServerInfo serverInfo, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, TimeoutTimer timeout)
at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, TimeoutTimer timeout, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 标识,SqlConnectionString connectionOptions,对象 providerInfo,字符串 newPassword,SqlConnection owningObject,布尔重定向用户实例)
在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 选项,对象 poolGroupProviderInfo,DbConnectionPool 池, DbConnection owningConnection)
在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
在 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()
在 MyApp.DataGateway.getTable(String sql)
在 MyApp.frmMain.InitialiseList()
在 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(Message& m)
在 System .Windows.FormsControl.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

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

有谁知道它为什么或如何消失?

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

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

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

当我们这样做的时候,为什么所有的数据都丢失了?它不会在仍然存在的 mdf 文件中吗?

4

0 回答 0