SQL方法需要很长时间

时间:2016-02-20 16:04:49

标签: c# sqlite

我在SQL#中使用SQLite。

我使用以下方法循环播放电视节目及其剧集列表并将其插入数据库。它最终进入大约1200行,需要2分28秒。这感觉有点慢,所以我希望人们看看我的方法,看看我是不是做了一些愚蠢的事情(我对此并不熟悉)。

public void InsertAllEpisodes(List<TVDBSharp.Models.Show> showList)
    {

        using (SQLiteConnection dbconnection = new SQLiteConnection(connectionString))
        {
            string seasonNumber;
            string episodeNumber;
            string insertShowSQL = @"INSERT INTO AllEpisodes (Key, ShowName, ShowId, EpisodeName, SeasonEpisode) VALUES (@Key, @ShowName, @ShowId, @EpisodeName, @SeasonEpisode)";

            foreach (var show in showList)
            {
                foreach (var episode in show.Episodes)
                {
                    if (episode.SeasonNumber != 0)
                    {
                        string seasonEpisode = "default";
                        if ((episode.SeasonNumber != 0) && (episode.SeasonNumber.ToString().Length == 1)) { seasonNumber = "0" + episode.SeasonNumber.ToString(); }
                        else { seasonNumber = episode.SeasonNumber.ToString(); }
                        if (episode.EpisodeNumber.ToString().Length == 1) { episodeNumber = "0" + episode.EpisodeNumber.ToString(); }
                        else { episodeNumber = episode.EpisodeNumber.ToString(); }
                        seasonEpisode = seasonNumber + episodeNumber;
                        SQLiteCommand command = new SQLiteCommand(insertShowSQL, dbconnection);
                        command.Parameters.AddWithValue("Key", show.Id + seasonEpisode);
                        command.Parameters.AddWithValue("ShowName", show.Name);
                        command.Parameters.AddWithValue("ShowId", show.Id);
                        command.Parameters.AddWithValue("EpisodeName", episode.Title);
                        command.Parameters.AddWithValue("SeasonEpisode", seasonEpisode);
                        dbconnection.Open();
                        try
                        {
                            command.ExecuteScalar();
                        }
                        catch (SQLiteException ex)
                        {
                            if (ex.ResultCode != SQLiteErrorCode.Constraint)
                            {
                                File.AppendAllText(programDataPath + "SQLErrors.txt", ex.Message + "\n");
                            }
                        }
                        dbconnection.Close();
                    }
                }

            }
        }

    }

1 个答案:

答案 0 :(得分:0)

我已阅读并使用sqlComm = new SQLiteCommand("begin", dbconnection)sqlComm = new SQLiteCommand("end", dbconnection),并在不到1秒的时间内将其插入。

public void InsertAllEpisodes(List<TVDBSharp.Models.Show> showList)
    {

        using (SQLiteConnection dbconnection = new SQLiteConnection(connectionString))
        {

            dbconnection.Open();
            string seasonNumber;
            string episodeNumber;
            string insertShowSQL = @"INSERT INTO AllEpisodes (Key, ShowName, ShowId, EpisodeName, SeasonEpisode) VALUES (@Key, @ShowName, @ShowId, @EpisodeName, @SeasonEpisode)";
            SQLiteCommand sqlComm;
            sqlComm = new SQLiteCommand("begin", dbconnection);
            sqlComm.ExecuteNonQuery();
            foreach (var show in showList)
            {
                foreach (var episode in show.Episodes)
                {
                    if (episode.SeasonNumber != 0)
                    {
                        string seasonEpisode = "default";
                        if ((episode.SeasonNumber != 0) && (episode.SeasonNumber.ToString().Length == 1)) { seasonNumber = "0" + episode.SeasonNumber.ToString(); }
                        else { seasonNumber = episode.SeasonNumber.ToString(); }
                        if (episode.EpisodeNumber.ToString().Length == 1) { episodeNumber = "0" + episode.EpisodeNumber.ToString(); }
                        else { episodeNumber = episode.EpisodeNumber.ToString(); }
                        seasonEpisode = seasonNumber + episodeNumber;
                        sqlComm = new SQLiteCommand(insertShowSQL, dbconnection);
                        sqlComm.Parameters.AddWithValue("Key", show.Id + seasonEpisode);
                        sqlComm.Parameters.AddWithValue("ShowName", show.Name);
                        sqlComm.Parameters.AddWithValue("ShowId", show.Id);
                        sqlComm.Parameters.AddWithValue("EpisodeName", episode.Title);
                        sqlComm.Parameters.AddWithValue("SeasonEpisode", seasonEpisode);
                        try
                        {
                            sqlComm.ExecuteScalar();
                        }
                        catch (SQLiteException ex)
                        {
                            if (ex.ResultCode != SQLiteErrorCode.Constraint)
                            {
                                File.AppendAllText(programDataPath + "SQLErrors.txt", ex.Message + "\n");
                            }
                        }

                    }
                }

            }
            sqlComm = new SQLiteCommand("end", dbconnection);
            sqlComm.ExecuteNonQuery();
            dbconnection.Close();

        }

    }