Frequency Manager + ScannerのUIは非常に使いづらく、周波数を5個入力するだけでも大変。ということでどうにかできないかと模索中。とりあえずSQLiteは読めるようになった。大抵の場合読めれば書くのは楽だが、Data Baseはどうなんだろう?
C#でSQLiteを読むにはここからsqlite-netFx45-setup-bundle-x64-2012-1.0.97.0.exeをダウンロードしてくる。今回はx64を使ったが、x32のほうが使い回しできていいと思う。またC#の参照に追加するにはインストールディレクトリから探してこないとダメみたい。僕の環境ではC:\Program Files\System.Data.SQLite\2012\binにSystem.Data.SQLite.dllが入っているので、こいつを追加した。またVisual StudioはExpress 2015を使ったが、Any CPUでは警告が出るために構成マネージャでx64のプラットフォームを設定した。これは2013とかでも同じ。
以下、SQLiteのデータベースを読むためのコード。
using System; using System.Collections.Generic; using System.Data.SQLite; using System.Text; using System.Windows.Forms; namespace FreqMgr { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void OpenButton_Click(object sender, EventArgs e) { string Path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\SDRSFM"; string[] FileNames = FileSelect(Path, "FreqMgr.db", "Data Base File|*.db|All File|*.*"); if (FileNames == null) { return; } List<string> tList = new List<string>(); string[] DataNames = { "Id", "Frequency", "Center", "Description", "Mode", "Protocol", "Call Sign", "Service", "Shift Enabled", "Shift", "Filter Type", "Filter Bandwidth", "Filter Order", "Squelch Enabled", "Squelch", "CW Shift", "Notes", "Date", "Locked", "Flagged" }; StringBuilder sb = new StringBuilder(); using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + FileNames[0])) { conn.Open(); using (SQLiteCommand command = conn.CreateCommand()) { command.CommandText = "SELECT * FROM Data"; using (SQLiteDataReader reader = command.ExecuteReader()) { while (reader.Read()) { sb.Clear(); foreach (string DataName in DataNames) { sb.Append(reader[DataName].ToString() + ","); } tList.Add(sb.ToString().Substring(0, sb.Length - 1)); } } } conn.Close(); } sb.Clear(); foreach (string DataName in DataNames) { sb.Append(DataName + ","); } sb.Remove(sb.Length - 1, 1); for (int i = 0; i < tList.Count; i++) { sb.Append("\n" + tList[i]); } //MessageBox.Show(sb.ToString()); Clipboard.SetText(sb.ToString().Replace(',', '\t')); } private string[] FileSelect(string InitialDirectory, string FileName, string Filter, bool Multiselect = false) { OpenFileDialog ofd = new OpenFileDialog(); ofd.InitialDirectory = InitialDirectory; ofd.FileName = FileName; ofd.Filter = Filter; ofd.Multiselect = Multiselect; if (ofd.ShowDialog() != DialogResult.OK) { return (null); } return (ofd.FileNames); } } }
データを表示するとこうなる。
とりあえずFrequency,Center,Description,Mode,Filter Bandwidthがあれば事足りそう。Dateは謎なデータだ。日しか使われていないし、UTCではなくローカルタイムのようだ。Tと書いてあるからといってUTC-07でもないらしい。おそらくDateは追加日で表示をソートするのに使ってる程度だと思うので、あんまり気にしなくても良さそう。
あとはSQLiteにデータを書き込むことができれば何とかなりそうだ。
0 件のコメント:
コメントを投稿