このコードには複数のコードがあったため、このコードでExtract Methodを使用しました。これが、次のようになりました。
private void InsertStatement(string table, string table2, TestURLGUI4.Form1 form, SQLiteConnection sql_con, ref int dbID, ref int dbID2, Chrome chrome, int max)
{
try
{
List<int> dbIDs = new List<int>();
using (SQLiteTransaction mytransaction = sql_con.BeginTransaction())
{
using (SQLiteCommand mycommand = new SQLiteCommand(sql_con))
{
mycommand.CommandText = "insert or ignore into " + table + " (id, url, title, visit_count, frecency, last_visit_date) values (@dbID,@url,@title,@visit,@frecency,@time)";
for (var count2 = 0; count2 < chrome.URLs.Count; count2++)
{
URL u = chrome.URLs[count2];
mycommand.Parameters.Add(new SQLiteParameter("@dbID", dbID));
mycommand.Parameters.Add(new SQLiteParameter("@url", u.url));
mycommand.Parameters.Add(new SQLiteParameter("@title", u.title));
mycommand.Parameters.Add(new SQLiteParameter("@visit", u.frequency));
mycommand.Parameters.Add(new SQLiteParameter("@time", ToPRTime(u.visited)));
mycommand.Parameters.Add(new SQLiteParameter("@frecency", ToFrecency(u.frequency)));
mycommand.ExecuteNonQuery();
dbIDs.Add(dbID);
dbID++;
form.label1.Text = count2 + "/" + max;
Application.DoEvents();
}
}
mytransaction.Commit();
}
using (SQLiteTransaction mytransaction = sql_con.BeginTransaction())
{
using (SQLiteCommand mycommand = new SQLiteCommand(sql_con))
{
mycommand.CommandText = "insert or ignore into " + table2 + " (id, from_visit, place_id, visit_date, visit_type, session) values (@dbID2,2,@dbID,@time,1, 0)";
for (var count2 = 0; count2 < chrome.URLs.Count; count2++)
{
URL u = chrome.URLs[count2];
mycommand.Parameters.Add(new SQLiteParameter("@dbID2", dbID2));
mycommand.Parameters.Add(new SQLiteParameter("@dbID", dbIDs[count2]));
mycommand.Parameters.Add(new SQLiteParameter("@time", ToPRTime(u.visited)));
mycommand.ExecuteNonQuery();
dbID2++;
form.label1.Text = count2 + "/" + max;
Application.DoEvents();
}
}
mytransaction.Commit();
}
}
catch
{
throw;
}
}
唯一の問題は、Chromeタイプパラメータの代わりに、異なるクラスの複数のインスタンスを作成したことです。たとえば、それぞれを渡す必要があります。
IE ie = new IE();
Firefox firefox = new Firefox();
さて、Chromeの代わりに、Chrome、Firefox、IEなどをすべて同じパラメータで一度に1つずつ渡すことができるように、パラメータを変更するにはどうすればよいですか?