2010-11-24 20 views
0

ビルドされたスキーマを持つ有効なSQLiteConnectionにある添付データベースファイルにアクセスしようとすると、「このようなテーブルがありません」というエラーが表示されます。sqlite添付データベースの問題

"メイン"接続でいくつかのテストデータを保存した後、ファイルを添付し、後で使用するために "main"からデータをエクスポートしようとします。ここでは、ファイルを添付するために使用されるコードは次のとおりです。

private static void _attachDatabase(SQLiteConnection conn, string dataFile) { 
var cmd = new SQLiteCommand(conn) 
        { 
         CommandText = string.Format("ATTACH '{0}' AS {1}", dataFile, ATTACHED_DB) 
        }; 
_log.Debug(cmd.CommandText); 
cmd.ExecuteNonQuery(); 
} 

コマンドのログ出力は、私もファイルに挿入しようとすると、私はこれの最後にエラーが発生します

"...\bin\Debug\testData.db3' AS asdf" where testData.db3 is the file. 

です役職。

提供された情報から問題が発生していませんか?さて、私は、デバッガのどこかに添付のdb( "asdf")を見ることができるでしょうか?

乾杯、
Berryl

試験 'SQLiteTesting.Helpers.QueryTests.Director_if_Tim_Burton_query_should_return_one_movie' が失敗しました:TestFixtureSetUpはQueryTests

に失敗し

TestFixtureに失敗しました:System.Data.SQLite.SQLiteException:SQLiteのエラー そのようなテーブル:asdf.ActorRole at System.Data.SQLite.SQLite3.Prepare(SQLiteConnection cnn、String strSql、SQLiteStatement previous、UInt32 timeoutMS、String & strRemain) (System.Data.SQLite.SQLiteCommand.BuildNextCommand ) で(SQLiteCommand CMD、のCommandBehavior挙動)System.Data.SQLite.SQLiteDataReader..ctorでSystem.Data.SQLite.SQLiteDataReader.NextResultでSystem.Data.SQLite.SQLiteCommand.GetStatement(のInt32インデックス) () でSystem.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehaviorビヘイビア) at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery() at SQLiteTesting.Helpers.SQLiteLoader._copyTableData(SQLiteConnection conn、String source、String destination)in C:\ Users \ Lord & Master \ Documents \ Projects \ Data \ NHib projects \ Cookbook \ SQLiteTesting \ Helpers \ SQLiteLoader.cs:C:\ Users \ Lord内のSQLiteTesting.Helpers.SQLiteLoader.ExportData(SQLiteConnection conn、String dataFile)で の行番号&マスター\ドキュメント\プロジェクト\データ\ NHibプロジェクト& Master \ Documents \ Projects \ Data \ NHibプロジェクト\ Cookbook \ SQLiteTesting \ Helpers \ SQLiteTesting \ Helpers \ SQLiteLoader.cs:行30 でSQLiteTesting.Helpers.QueryTests.OnFixtureSetUp()をC:\ Users \ QueryTests.cs:C:¥Users¥Lord & Master \ Documents \ Projects \ Data \ NHibプロジェクト\ Cookbook \ SQLiteTesting \ Helpers \ BaseFixture.csのSQLiteTesting.Helpers.BaseFixture.FixtureSetUp()の行番号 :行23 2010 -11-23 18:15:36,835 DEBUG ATTACH '... \ bin \ Debug \ testData.db3' AS as 2010-11-23 18:18:12,935 asdf.ActorRoleにDEBUG INSERT SELECT * FROM ActorRole

答えて

2

手がかりは次のとおりです。

SQLite error no such table: asdf.ActorRole at 

あなたはactualy、あなたが主要な(おそらく唯一!)のsqliteの落とし穴を受けている、テーブルを定義した場合。データベースファイルが存在しない場合は、を静かにあなたのために空のデータベースを作成します。

ファイルパスを再度確認し、ディレクトリに新しい空のsq3ファイルがあるかどうかを確認します。

+0

こんにちはJames。添付ファイルが既存の接続からスキーマを添付ファイルdbに自動的に複製すると仮定するのは間違っていますか?もしそうなら、私は手動ですべてのテーブルを複製する必要があります。これを行う最善の方法は何ですか?乾杯 – Berryl

+0

それは私が言ったことではない!存在しないファイルを指定すると、sqliteは空のスキーマを持つ新しいファイルを作成します。 –

+0

あなたはそれが空であると言っていましたが、ATTACHが私が思っていたようにデータベースを複製していなかったことを知ってくれました。テーブルを作成した後、すべて正常に動作します。新しい情報を明確にするためのフォローアップの質問は良いことだと思いますが、あなたは同意しませんか? – Berryl

0

AS {1}声明が必要ですか?データベース名を強制するのは混乱しているようです。

+0

私はそう思うのは、1つのメモリと1つのファイルを持つ同じdbの2つのコピーです。したがって、両方のdbにあるテーブルが参照されるとき、SQLiteはどちらがどちらであるかを区別する方法を持っています。 – Berryl

関連する問題