public static void Execute() { NpgsqlConnectionInfo info = new NpgsqlConnectionInfo { ServerName = _hostname, ServerPort = _port, DatabaseName = _database, UserName = _username }; info.FillStoredPassword(false); using (IDbConnection conn = TryLogin(info)) { if (conn == null) { Console.Error.WriteLine("ログインできませんでした。終了します。"); Environment.Exit(1); } } ExportTable obj = new ExportTable { DataSet = new NpgsqlDataSet(info) }; if (_exportDir == null) { _exportDir = Environment.CurrentDirectory; } Task t = null; switch (_mode) { case ExportMode.Export: t = obj.ExportAsync(obj.DataSet, _schemas, _excludeSchemas, _configFileName, _exportDir, _encoding); break; case ExportMode.GenerateConfig: t = obj.ExportConfigAsync(obj.DataSet, _schemas, _excludeSchemas, _configFileName, _ruleFileName, _encoding); break; case ExportMode.GenerateRule: File.WriteAllText(_ruleFileName, Properties.Resources.DBExpRule, _encoding); break; } if (t == null) { return; } while (!t.IsCompleted) { Thread.Sleep(100); } if (t.IsFaulted) { Console.Error.WriteLine(t.ToString()); Console.Error.Flush(); Environment.Exit(1); } }
public static void SaveConnectionInfoToRegistry(ConnectionInfo info) { NpgsqlConnectionInfo obj = info as NpgsqlConnectionInfo; Registry.SetValue(0, "Connection", "ServerName", obj.ServerName ?? string.Empty); Registry.SetValue(0, "Connection", "ServerPort", obj.ServerPort); Registry.SetValue(0, "Connection", "DatabaseName", obj.DatabaseName ?? string.Empty); Registry.SetValue(0, "Connection", "UserName", obj.UserName ?? string.Empty); Registry.SetValue(0, "Connection", "SearchPath", obj.SearchPath ?? string.Empty); }
private void window_Loaded(object sender, RoutedEventArgs e) { gridLoading.Visibility = Visibility.Collapsed; ConnectionInfo info = new NpgsqlConnectionInfo() { ServerName = App.Hostname, ServerPort = App.Port, DatabaseName = App.Database, UserName = App.Username }; if (App.HasConnectionInfo) { if (!info.FillStoredPassword(true)) { if (TryConnect(info)) { return; } } } else { info = NewConnectionInfoFromRegistry(); } NewConnectionWindow win = new NewConnectionWindow(); win.Owner = this; win.Target = info; bool?ret = win.ShowDialog(); if (!ret.HasValue || !ret.Value) { return; } info = win.Target; Connect(info); App.Connections.Merge(info); App.Connections.Save(); menuItemPsql.IsEnabled = !string.IsNullOrEmpty(GetExecutableFromPath(menuItemPsql.Tag.ToString())); menuItemPgdump.IsEnabled = !string.IsNullOrEmpty(GetExecutableFromPath(menuItemPgdump.Tag.ToString())); { CommandBinding cb; cb = new CommandBinding(DataGridCommands.CopyTable, CopyTableCommand_Executed, CopyTableCommand_CanExecute); CommandBindings.Add(cb); cb = new CommandBinding(DataGridCommands.CopyTableContent, CopyTableContentCommand_Executed, CopyTableCommand_CanExecute); CommandBindings.Add(cb); cb = new CommandBinding(DataGridCommands.CopyTableAsInsert, CopyTableAsInsertCommand_Executed, CopyTableCommand_CanExecute); CommandBindings.Add(cb); cb = new CommandBinding(DataGridCommands.CopyTableAsCopy, CopyTableAsCopyCommand_Executed, CopyTableCommand_CanExecute); CommandBindings.Add(cb); } }
private void menuItemPsql_Click(object sender, RoutedEventArgs e) { string exe = GetExecutableFromPath((sender as MenuItem).Tag.ToString()); if (string.IsNullOrEmpty(exe)) { return; } NpgsqlConnectionInfo info = CurrentDataSet.ConnectionInfo as NpgsqlConnectionInfo; string arg = string.Format("-h {0} -p {1} -d {2} -U {3}", info.ServerName, info.ServerPort, info.DatabaseName, info.UserName); Process.Start(exe, arg); }
public static ConnectionInfo[] GetKnownConnectionInfos() { string path = GetPgPassConfPath(); if (!File.Exists(path)) { return(new ConnectionInfo[0]); } List <ConnectionInfo> list = new List <ConnectionInfo>(); FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); using (StreamReader sr = new StreamReader(stream, Encoding.Default)) { while (!sr.EndOfStream) { string s = sr.ReadLine(); if (string.IsNullOrEmpty(s)) { continue; } string[] prms = ExtractPgPassEntry(s); foreach (string p in prms) { // ワイルドカードを使用しているエントリーは対象外 if (p == "*") { continue; } } if (prms.Length < 5) { continue; } NpgsqlConnectionInfo info = new NpgsqlConnectionInfo(); try { info.ServerName = prms[0]; info.ServerPort = int.Parse(prms[1]); info.DatabaseName = prms[2]; info.UserName = prms[3]; info.Password = prms[4]; info.IsPasswordHidden = true; info.Name = info.GetDefaultName(); list.Add(info); } catch { } } } list.Sort(CompareByName); return(list.ToArray()); }
private ConnectionInfo NewConnectionInfoFromRegistry() { NpgsqlConnectionInfo info = new NpgsqlConnectionInfo() { ServerName = App.Registry.GetString("Connection", "ServerName", App.Hostname), ServerPort = App.Registry.GetInt32("Connection", "ServerPort", App.Port), DatabaseName = App.Registry.GetString("Connection", "DatabaseName", App.Database), UserName = App.Registry.GetString("Connection", "UserName", App.Username), SearchPath = App.Registry.GetString("Connection", "SearchPath", App.SearchPath), }; info.FillStoredPassword(false); info = App.Connections.Find(info) as NpgsqlConnectionInfo; return(info); }
private static IDbConnection TryLogin(NpgsqlConnectionInfo info) { for (int i = 0; i < 3; i++) { try { IDbConnection conn = info.NewConnection(true); return(conn); } catch { info.Password = ReadPassword(); } } return(null); }
private void MenuItemOpenDb_Click(object sender, RoutedEventArgs e) { MenuItem mi = sender as MenuItem; if (mi == null) { return; } ConnectionInfo info = mi.Tag as ConnectionInfo; if (CurrentDataSet != null) { string path = Assembly.GetExecutingAssembly().Location; NpgsqlConnectionInfo obj = info as NpgsqlConnectionInfo; if (obj != null) { string args = string.Format("-h {0} -p {1} -d {2} -U {3}", obj.ServerName, obj.ServerPort, obj.DatabaseName, obj.UserName); Process.Start(path, args); } else { Process.Start(path); } return; } if (info == null) { info = NewConnectionInfoFromRegistry(); } NewConnectionWindow win = new NewConnectionWindow(); win.Owner = this; win.Target = info; bool?ret = win.ShowDialog(); if (!ret.HasValue || !ret.Value) { return; } info = win.Target; Connect(info); App.Connections.Merge(info); App.Connections.Save(); }
public static void Execute() { NpgsqlConnectionInfo info = new NpgsqlConnectionInfo { ServerName = _hostname, ServerPort = _port, DatabaseName = _database, UserName = _username }; info.FillStoredPassword(false); using (IDbConnection conn = TryLogin(info)) { if (conn == null) { Console.Error.WriteLine("ログインできませんでした。終了します。"); Environment.Exit(1); } } ExportSchema obj = new ExportSchema { DataSet = new NpgsqlDataSet(info) { NewLineRule = _newLine } }; if (_exportDir == null) { _exportDir = Environment.CurrentDirectory; } Task t = obj.ExportAsync(obj.DataSet, _schemas, _excludeSchemas, _exportDir, _encoding); while (!t.IsCompleted) { Thread.Sleep(100); } if (t.IsFaulted) { Console.Error.WriteLine(t.ToString()); Console.Error.Flush(); Environment.Exit(1); } }
private void OpenDatabase(Database database) { if (database == null) { throw new ArgumentNullException("database"); } if (CurrentDataSet == null) { return; } NpgsqlConnectionInfo obj = CurrentDataSet.ConnectionInfo as NpgsqlConnectionInfo; if (obj == null) { return; } string path = Assembly.GetExecutingAssembly().Location; string args = string.Format("-h {0} -p {1} -d {2} -U {3}", obj.ServerName, obj.ServerPort, database.Name, obj.UserName); Process.Start(path, args); }
public override int ContentCompareTo(ConnectionInfo obj) { NpgsqlConnectionInfo o = obj as NpgsqlConnectionInfo; int ret = base.ContentCompareTo(o); if (ret != 0) { return(ret); } ret = ServerPort - o.ServerPort; if (ret != 0) { return(ret); } ret = string.Compare(DatabaseName, o.DatabaseName); if (ret != 0) { return(ret); } return(0); }
public NpgsqlDataSet(NpgsqlConnectionInfo info) : base(info) { }
private string GetCommandLineArgs() { StringBuilder buf = new StringBuilder(); NpgsqlConnectionInfo info = DataSet.ConnectionInfo as NpgsqlConnectionInfo; buf.AppendFormat("-h {0} -p {1} -d {2} -U {3}", info.ServerName, info.ServerPort, info.DatabaseName, info.UserName); string s = comboBoxEncoding.SelectedValue.ToString(); if (!string.IsNullOrEmpty(s)) { buf.Append(" -E "); buf.Append(s); } if (!string.IsNullOrEmpty(_exportFile)) { buf.Append(" -f "); buf.Append(GetEscapedFileName(_exportFile)); } if (IsChecked(radioButtonExportSchema)) { buf.Append(" -s"); } else if (IsChecked(radioButtonExportData)) { buf.Append(" -a"); } string fmt = comboBoxFormat.SelectedValue.ToString(); if (!string.IsNullOrEmpty(fmt)) { buf.Append(" -F"); buf.Append(fmt); } if (checkBoxCompress.IsEnabled && IsChecked(checkBoxCompress)) { buf.Append(" -Z "); buf.Append(comboBoxCompressLevel.Text); } if (IsChecked(checkBoxBlobs)) { buf.Append(" -b"); } if (IsChecked(checkBoxClean)) { buf.Append(" -c"); } if (IsChecked(checkBoxCreate)) { buf.Append(" -C"); } if (IsChecked(radioButtonSchema)) { foreach (CheckBox cb in wrapPanelSchemas.Children) { if (IsChecked(cb)) { buf.Append(" -n "); TextBlock tb = cb.Content as TextBlock; buf.Append(tb.Text); } } } if (IsChecked(radioButtonTable)) { foreach (string tbl in SplitByWhiteSpace(textBoxTables.Text)) { buf.Append(" -t "); buf.Append(tbl); } } if (IsChecked(radioButtonExcludeTable)) { foreach (string tbl in SplitByWhiteSpace(textBoxExcludeTables.Text)) { buf.Append(" -T "); buf.Append(tbl); } } if (IsChecked(radioButtonExcludeTableData)) { foreach (string tbl in SplitByWhiteSpace(textBoxExcludeTables.Text)) { buf.Append(" --exclude-table-data="); buf.Append(tbl); } } if (IsChecked(checkBoxUseJob)) { int nJob; if (!int.TryParse(textBoxNumJobs.Text, out nJob)) { textBoxLog.AppendText("並列ジョブ数が不正です"); } else { buf.Append(" -j "); buf.Append(nJob); } } if (IsChecked(checkBoxLockTimeout)) { int timeout; if (!int.TryParse(textBoxLockTimeout.Text, out timeout)) { textBoxLog.AppendText("テーブルがロックされていた場合の待ち時間が不正です"); } else { buf.Append(" --lock-wait-timeout="); buf.Append(timeout); } } if (IsChecked(checkBoxExportOid)) { buf.Append(" -o"); } return(buf.ToString()); }