Hallo
ich habe 3 Tabellen: Movies, Sets und MoviesSets.
Die Movie-Inforamtionen lese ich aus einer XML aus. Wenn dort <set>Avatar Collection</set> vorhanden ist soll während dem Speichern der Movie-Infos überprüft werden, ob schon ein Set mit selbem Namen in Sets vorhanden ist. Falls vorhanden benötige ich die SetID um in der Tabelle MoviesSets die MovieID mit der SetID abzulegen. Falls nicht vorhanden soll der Eintrag in Sets erstellt werden und die neue SetID zurückgegeben werden, damit ich ebenfalls in der MoviesSets Tabelle die beiden miteinander verknüpfen kann.
Die Tabellen sehen folgendermassen aus:
MovieDB Klasse:
VB um das Movie zu speichern:
Danach soll jetzt die Abfrage in Sets und Eintrag in MoviesSets folgen.
Ich hoffe ich habe das jetzt richtig zusammengekürtzt, es gibt in allen Tabellen in Klassen noch weitere Felder.
ich habe 3 Tabellen: Movies, Sets und MoviesSets.
Die Movie-Inforamtionen lese ich aus einer XML aus. Wenn dort <set>Avatar Collection</set> vorhanden ist soll während dem Speichern der Movie-Infos überprüft werden, ob schon ein Set mit selbem Namen in Sets vorhanden ist. Falls vorhanden benötige ich die SetID um in der Tabelle MoviesSets die MovieID mit der SetID abzulegen. Falls nicht vorhanden soll der Eintrag in Sets erstellt werden und die neue SetID zurückgegeben werden, damit ich ebenfalls in der MoviesSets Tabelle die beiden miteinander verknüpfen kann.
Die Tabellen sehen folgendermassen aus:
Quellcode
- CREATE TABLE Sets(
- ID INTEGER AUTOINCREMENT,
- SetName TEXT NOT NULL,
- HasPoster BOOL NOT NULL DEFAULT False,
- PosterPath TEXT,
- PRIMARY KEY (ID,SetName)
- );
- CREATE TABLE Movies (
- ID INTEGER PRIMARY KEY AUTOINCREMENT,
- Title TEXT
- );
- CREATE TABLE MoviesSets(
- MovieID INTEGER NOT NULL,
- SetID INTEGER NOT NULL,
- PRIMARY KEY (MovieID,SetID)
- );
MovieDB Klasse:
VB um das Movie zu speichern:
VB.NET-Quellcode
- Dim SQLtransaction As SQLite.SQLiteTransaction = Nothing
- If Not BatchMode Then SQLtransaction = _myvideosDBConn.BeginTransaction()
- Using SQLcommand As SQLite.SQLiteCommand = _myvideosDBConn.CreateCommand()
- If IsNew Then
- SQLcommand.CommandText = String.Concat("INSERT OR REPLACE INTO movies (Title) VALUES (?); SELECT LAST_INSERT_ROWID() FROM movies;")
- Else
- SQLcommand.CommandText = String.Concat("INSERT OR REPLACE INTO movies (ID, Title) VALUES (?,?); SELECT LAST_INSERT_ROWID() FROM movies;")
- Dim parMovieID As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parMovieID", DbType.Int32, 0, "ID")
- parMovieID.Value = _movieDB.ID
- End If
- Dim parTitle As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parTitle", DbType.String, 0, "Title")
- parTitle.Value = _movieDB.Title
- If IsNew Then
- Using rdrMovie As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader()
- If rdrMovie.Read Then
- _movieDB.ID = Convert.ToInt64(rdrMovie(0))
- Else
- Master.eLog.Error(GetType(Database), "Something very wrong here: SaveMovieToDB", _movieDB.ToString, "Error")
- _movieDB.ID = -1
- Return _movieDB
- End If
- End Using
- Else
- SQLcommand.ExecuteNonQuery()
- End If
- End Using
- SQLtransaction.Commit()
Danach soll jetzt die Abfrage in Sets und Eintrag in MoviesSets folgen.
Ich hoffe ich habe das jetzt richtig zusammengekürtzt, es gibt in allen Tabellen in Klassen noch weitere Felder.