ForumSurfer.Data.Feed.Save C# (CSharp) Method

Save() public method

public Save ( System.Boolean SaveArticles = false ) : void
SaveArticles System.Boolean
return void
        public void Save(Boolean SaveArticles = false)
        {
            String sqlInsertHosts = @"
                INSERT INTO Hosts (uri, zoom)
                SELECT $uri, 100
                WHERE NOT EXISTS (
                    SELECT *
                    FROM Hosts
                    WHERE uri = $uri
                );
            ";

            String sqlGetHost = @"
                SELECT host_id
                FROM Hosts
                WHERE uri = $uri
            ";

            String sqlInsertFeeds = @"
                INSERT INTO Feeds (
                    uri,
                    last_update,
                    title,
                    host_id
                )
                SELECT
                    $uri,
                    $last_update,
                    $title,
                    $host_id
                WHERE NOT EXISTS (
                    SELECT *
                    FROM Feeds
                    WHERE uri = $uri
                );
            ";

            String sqlUpdateFeed = @"
                UPDATE Feeds
                SET last_update = $last_update,
                    title = $title
                WHERE uri = $uri;
            ";

            String sqlGetFeed = @"
                SELECT feed_id
                FROM Feeds
                WHERE uri = $uri
            ";

            if (Host == null)
                Host = Location.Host;

            if (Title == null)
                Title = Location.ToString();

            using (SQLiteConnection m_dbConnection = new SQLiteConnection(Repository.ConnectionString))
            {
                m_dbConnection.Open();
                SQLiteTransaction tran = m_dbConnection.BeginTransaction();
                try
                {
                    SQLiteCommand command = new SQLiteCommand(sqlInsertHosts, m_dbConnection);
                    command.Parameters.AddWithValue("$uri", Host);
                    command.ExecuteNonQuery();

                    command = new SQLiteCommand(sqlGetHost, m_dbConnection);
                    command.Parameters.AddWithValue("$uri", Host);
                    var host_id = command.ExecuteScalar();

                    command = new SQLiteCommand(sqlInsertFeeds, m_dbConnection);
                    command.Parameters.AddWithValue("$uri", Location.ToString());
                    command.Parameters.AddWithValue("$last_update", LastUpdate.ToString("s"));
                    command.Parameters.AddWithValue("$title", Title);
                    command.Parameters.AddWithValue("$host_id", host_id);
                    int inserted = command.ExecuteNonQuery();

                    if(inserted <= 0)
                    {
                        command = new SQLiteCommand(sqlUpdateFeed, m_dbConnection);
                        command.Parameters.AddWithValue("$uri", Location.ToString());
                        command.Parameters.AddWithValue("$last_update", LastUpdate.ToString("s"));
                        command.Parameters.AddWithValue("$title", Title);
                        command.ExecuteNonQuery();
                    }

                    command = new SQLiteCommand(sqlGetFeed, m_dbConnection);
                    command.Parameters.AddWithValue("$uri", Location.ToString());
                    Id = (long)command.ExecuteScalar();
                    tran.Commit();
                }
                catch (Exception)
                {
                    tran.Rollback();
                    throw;
                }
            }

            if (SaveArticles)
            {
                foreach(Model.Article a in Articles)
                {
                    Article dataArt = new Article(a);
                    dataArt.Save();
                }
            }
        }