2010-11-24 8 views
0

Je reçois une erreur "no such table" lorsque j'essaie d'accéder à un fichier db attaché qui se trouve sur une connexion SQLite valide avec un schéma construit. Après avoir sauvegardé certaines données de test sur la connexion "principale", j'attache le fichier, puis j'essaie d'exporter les données de "main" vers le fichier pour une utilisation ultérieure. Voici le code utilisé pour joindre le fichier:Problème de base de données attachée sqlite

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(); 
} 

La sortie du journal de la commande est

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

Lorsque je tente d'insérer dans le fichier si, je reçois l'erreur à la fin de cette poster.

Est-ce que quelqu'un voit le problème dans les informations fournies? En aparté, devrais-je pouvoir voir le db attaché ("asdf") quelque part dans le débogueur?

Cheers,
Berryl

Test 'SQLiteTesting.Helpers.QueryTests.Director_if_Tim_Burton_query_should_return_one_movie' a échoué: TestFixtureSetUp a échoué dans QueryTests

TestFixture a échoué: System.Data.SQLite.SQLiteException: erreur SQLite pas une telle table : asdf.ActorRole à System.Data.SQLite.SQLite3.Prepare (SQLiteConnection cnn, chaîne strSql, SQLiteStatement précédent, UInt32 timeoutMS, chaîne & strRemain) à System.Data.SQLite.SQLiteCommand.BuildNextCommand () à System.Data.SQLite.SQLiteCommand.GetStatement (indice Int32) à System.Data.SQLite.SQLiteDataReader.NextResult() à System.Data.SQLite.SQLiteDataReader..ctor (SQLiteCommand cmd, comportez CommandBehavior) à System.Data.SQLite.SQLiteCommand.ExecuteReader (comportement CommandBehavior) à System.Data.SQLite.SQLiteCommand.ExecuteNonQuery() à SQLiteTesting.Helpers.SQLiteLoader._copyTableData (connexion SQLiteConnection, source de chaîne, destination de la chaîne) dans C: \ Users \ Lord & Master \ Documents \ Projets \ Données \ Projets NHIB \ Cookbook \ SQLiteTesting \ Helpers \ SQLiteLoader.cs: ligne 68 à SQLiteTesting.Helpers.SQLiteLoader.ExportData (SQLiteConnection conn, String dataFile) dans C: \ Users \ Lord & Master \ Documents \ Projets \ Données \ NHib projec ts \ Cookbook \ SQLiteTesting \ Helpers \ SQLiteLoader.cs: ligne 30 à SQLiteTesting.Helpers.QueryTests.OnFixtureSetUp() dans C: \ Users \ Lord & Master \ Documents \ Projets \ Données \ Projets NHIB \ Cookbook \ SQLiteTesting \ Helpers \ QueryTests.cs: ligne 25 à SQLiteTesting.Helpers.BaseFixture.FixtureSetUp() dans C: \ Users \ Lord & Master \ Documents \ Projets \ Données \ Projets NHIB \ Cookbook \ SQLiteTesting \ Helpers \ BaseFixture.cs: ligne 23 2010 -11-23 18: 15: 36,835 DEBUG ATTACH '... \ bin \ Debug \ testData.db3' AS asd 2010-11-23 18: 18: 12,935 INSEREZ DEBUG DANS asdf.ActorRole SELECT * FROM ActorRole

Répondre

2

L'indice est:

SQLite error no such table: asdf.ActorRole at 

Si vous avez défini la table actualy, alors vous avez souffert le grand (probablement!) Sqlite Gotcha. Si le fichier de base de données ne se termine pas, il tranquillement créer une base de données vide pour vous.

Vérifiez à nouveau le chemin de votre fichier et recherchez un nouveau fichier sq3 vide qui apparaît dans votre répertoire.

+0

Salut James. Est-il incorrect de supposer que l'attachement copie automatiquement le schéma de la connexion existante dans le fichier joint db? Si oui, et que j'ai besoin de répliquer manuellement toutes les tables, quel est le meilleur moyen de le faire? Bravo – Berryl

+0

Ce n'est pas ce que j'ai dit! Si vous spécifiez un fichier inexistant, sqlite en crée un nouveau avec un schéma vide. –

+0

Vous avez dit que ce serait vide, ce qui * m'a * aidé à comprendre que ATTACH ne reproduisait pas le db comme je le pensais. Après avoir créé les tables, tout fonctionne bien. Je pense que des questions de suivi pour clarifier de nouvelles informations sont une bonne chose, n'est-ce pas? – Berryl

0

Avez-vous besoin de l'instruction AS {1}? Forcer le nom de la base de données semble l'embrouiller.

+0

Je pense que oui parce que l'idée est de deux copies de la même DB avec un en mémoire et un le fichier. Donc, quand une table qui sera dans les deux DB est référencée, SQLite a un moyen de distinguer qui est qui. – Berryl

Questions connexes