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 (ブール enlistOK)
で System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin (ServerInfo serverInfo、文字列 newPassword、ブール値の ignoreSniOpenTimeout、TimeoutTimer タイムアウト、SqlConnection owningObject)
で System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover (ServerInfo serverInfo、文字列 newPassword、ブール値の redirectedUserInstance、SqlConnection owningObject、SqlConnectionString connectionOptions、TimeoutTimer タイムアウト)
System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist (SqlConnection owningObject、TimeoutTimer タイムアウト、SqlConnectionString connectionOptions、文字列 newPassword、ブール値の redirectedUserInstance) で
System.Data.SqlClient.SqlInternalConnectionTds..ctor (DbConnectionPoolIdentity ID、SqlConnectionString connectionOptions、オブジェクト providerInfo、文字列 newPassword、SqlConnection owningObject、Boolean redirectedUserInstance)
で System.Data.SqlClient.SqlConnectionFactory.CreateConnection (DbConnectionOptions オプション、オブジェクト 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()
で MyApp.DataGateway.getTable(String sql)
で MyApp.frmMain.InitialiseList()
で MyApp.frmMain.frmMain_Load(オブジェクト送信者、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)
at System .Windows.FormsControl.ControlNativeWindow.WndProc(Message& m)
System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd、Int32 msg、IntPtr wparam、IntPtr lparam) で
.ldf
また、DB を初めてアタッチした後に SQL Server が作成するログ ファイル ( ) が見つからないことにも気付きました。
なぜ、またはどのように消えたのか、誰にもわかりませんか?
例外を読んで私が最初にしたことは(少し手荒なことは知っていますが、彼がまだ私のためにテストに時間を割くことができ、私が並行して問題を調査できる間に彼を元に戻して実行したかっただけです)与えることでしたすべてのユーザーの作業フォルダーへの完全なアクセス許可。これにより、少なくとも新しいログ ファイルを作成できます。
これにより、プログラムは正常に実行されましたが、初日に入力したすべてのデータが失われたわけではありません。
誰かが私のためにこの状況に光を当てることができますか? ログファイルが消えたのはなぜですか?
その間、なぜすべてのデータが失われたのでしょうか? まだそこにあったmdfファイルにありませんか?