にタグを挿入iが2つのテーブル問題SQLiteのDB、C位
"CREATE TABLE if not exists tag_name(" +
"tagid INTEGER PRIMARY KEY, " +
"title TEXT UNIQUE);";
"CREATE TABLE if not exists media_tags(" +
"media_id INTEGER, " +
"tagid INTEGER);";
を有するが、私はこのコードでそれらを挿入します。問題は、last_insert_rowidは私が期待しているものではないということです。私はINSERTが無視されると、挿入を失敗させるROWIDを返します。たとえば、 "tag1"、 "tag2"、 "tag3"を挿入するとします。 "tag2"を挿入すると、最後に挿入された成功した行の代わりに2が返されます。どのように私はこれを解決するのですか?
void insertMediaTags(List<string> tags, long mediaId)
{
foreach(string tag in tags)
{
command.CommandText =
"INSERT OR IGNORE INTO tag_name(title) VALUES(@title); " +
"SELECT last_insert_rowid() AS RecordID;";
command.Parameters.Add("@title", DbType.String).Value = tag;
long tagid = (long)command.ExecuteScalar();
command.CommandText =
"INSERT INTO media_tags(media_id, tagid) " +
"VALUES(@media_id, @tagid);";
command.Parameters.Add("@media_id", DbType.Int32).Value = mediaId;
command.Parameters.Add("@tagid", DbType.Int64).Value = tagid;
command.ExecuteNonQuery();
}
}
replaceは、古いPK Intを使用してすべてのエントリを壊す主キーを変更すると言いました。 –