Browse Source

Further mods to ServerBrowserTool and ConnectionStringDefinitionDialog to enable attaching connection strings to logical database connections - not currently working

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1684 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Dickon Field 20 years ago
parent
commit
c84261218b
  1. 14
      src/AddIns/Misc/SharpDbTools/Project/Src/Connection/ConnectionStringDefinitionDialog.cs
  2. 12
      src/AddIns/Misc/SharpDbTools/Project/Src/Connection/DbProvidersService.cs
  3. 37
      src/AddIns/Misc/SharpDbTools/Project/Src/Model/DbModelInfo.cs
  4. 12
      src/AddIns/Misc/SharpDbTools/Project/Src/Model/DbModelInfoService.cs
  5. 27
      src/AddIns/Misc/SharpDbTools/Project/Src/ServerBrowserTool.cs

14
src/AddIns/Misc/SharpDbTools/Project/Src/Connection/ConnectionStringDefinitionDialog.cs

@ -30,6 +30,7 @@ namespace SharpDbTools.Connection
ToolStripProgressBar connectionTestProgressBar = new ToolStripProgressBar(); ToolStripProgressBar connectionTestProgressBar = new ToolStripProgressBar();
ConnectionTestBackgroundWorker testConnectionBackgroundWorker; ConnectionTestBackgroundWorker testConnectionBackgroundWorker;
string resultMessage; string resultMessage;
string invariantName;
ConnectionTestState connectionTestState = ConnectionTestState.UnTested; ConnectionTestState connectionTestState = ConnectionTestState.UnTested;
public ConnectionStringDefinitionDialog() public ConnectionStringDefinitionDialog()
@ -47,6 +48,15 @@ namespace SharpDbTools.Connection
this.connectionTestProgressBar.Maximum = 150; this.connectionTestProgressBar.Maximum = 150;
} }
public string InvariantName {
get {
return this.invariantName;
}
set {
this.invariantName = value;
}
}
public ConnectionTestState ConnectionTestState { public ConnectionTestState ConnectionTestState {
get { get {
return this.connectionTestState; return this.connectionTestState;
@ -209,6 +219,10 @@ namespace SharpDbTools.Connection
void SubmitButtonClick(object sender, System.EventArgs e) void SubmitButtonClick(object sender, System.EventArgs e)
{ {
string name = (string)this.providerTypeComboBox.SelectedItem;
DbProvidersService service = DbProvidersService.GetDbProvidersService();
this.InvariantName = service.GetInvariantName(name);
this.DialogResult = DialogResult.OK; this.DialogResult = DialogResult.OK;
this.Close(); this.Close();
} }

12
src/AddIns/Misc/SharpDbTools/Project/Src/Connection/DbProvidersService.cs

@ -32,6 +32,9 @@ namespace SharpDbTools.Connection
private static DbProvidersService me = new DbProvidersService(); private static DbProvidersService me = new DbProvidersService();
private static Boolean initialized = false; private static Boolean initialized = false;
private Dictionary<string, DbProviderFactory> factories = new Dictionary<string, DbProviderFactory>(); private Dictionary<string, DbProviderFactory> factories = new Dictionary<string, DbProviderFactory>();
// This is only valid witin one session - do not persist
private Dictionary<string, string> invariantByNameLookup = new Dictionary<string, string>();
private List<string> names = new List<string>(); private List<string> names = new List<string>();
private DbProvidersService() private DbProvidersService()
@ -47,7 +50,10 @@ namespace SharpDbTools.Connection
foreach(DataRow row in rows) foreach(DataRow row in rows)
{ {
// TODO: factory out string literals for column names
string name = (string)row["Name"]; string name = (string)row["Name"];
string invariantName = (string)row["InvariantName"];
invariantByNameLookup.Add(name, invariantName);
//factoryData.Add(name, row); //factoryData.Add(name, row);
DbProviderFactory factory = DbProviderFactories.GetFactory(row); DbProviderFactory factory = DbProviderFactories.GetFactory(row);
names.Add(name); names.Add(name);
@ -73,6 +79,12 @@ namespace SharpDbTools.Connection
} }
} }
public string GetInvariantName(string name) {
string invariantName = null;
invariantByNameLookup.TryGetValue(name, out invariantName);
return invariantName;
}
public DbProviderFactory this[string name] public DbProviderFactory this[string name]
{ {
get get

37
src/AddIns/Misc/SharpDbTools/Project/Src/Model/DbModelInfo.cs

@ -48,14 +48,49 @@ namespace SharpDbTools.Model
string invariantName = (string)table.Rows[0][ColumnNames.InvariantName]; string invariantName = (string)table.Rows[0][ColumnNames.InvariantName];
return invariantName; return invariantName;
} }
set {
DataTable table = this.Tables[TableNames.ConnectionInfo];
string invariantName = (string)table.Rows[0][ColumnNames.InvariantName];
string name = this.Name;
string connectionString = this.ConnectionString;
if (invariantName == null) {
table.Rows[0][ColumnNames.InvariantName] = value;
}
// if invariant has changed must clear any existing metadata
else if (!(invariantName.Equals(value))) {
// clear tables
this.Tables.Clear();
DataTable newTable = CreateConnectionTable();
// add the first and only column of this table;
newTable.Rows.Add(new object[] {name, invariantName, connectionString});
}
}
} }
public string ConnectionString { public string ConnectionString {
get { get {
DataTable table = this.Tables[TableNames.ConnectionInfo]; DataTable table = this.Tables[TableNames.ConnectionInfo];
string connectionString = (string)table.Rows[0][ColumnNames.InvariantName]; string connectionString = (string)table.Rows[0][ColumnNames.ConnectionString];
return connectionString; return connectionString;
} }
set {
DataTable table = this.Tables[TableNames.ConnectionInfo];
string invariantName = (string)table.Rows[0][ColumnNames.InvariantName];
string name = this.Name;
string connectionString = this.ConnectionString;
if (connectionString == null) {
table.Rows[0][ColumnNames.ConnectionString] = value;
}
else if (!(connectionString.Equals(value))) {
this.Tables.Clear();
DataTable newTable = CreateConnectionTable();
// add the first and only column of this table;
newTable.Rows.Add(new object[] {name, invariantName, connectionString});
}
}
} }
public DbModelInfo() : base() public DbModelInfo() : base()

12
src/AddIns/Misc/SharpDbTools/Project/Src/Model/DbModelInfoService.cs

@ -41,6 +41,13 @@ namespace SharpDbTools.Model
} }
} }
/// <summary>
///
/// </summary>
/// <param name="name">The user readable name of the provider</param>
/// <param name="invariantName">the identifying name of the provider</param>
/// <param name="connectionString">the connection string for this connection</param>
/// <returns></returns>
public static DbModelInfo Add(string name, string invariantName, string connectionString) public static DbModelInfo Add(string name, string invariantName, string connectionString)
{ {
// TODO: add validation on name; invariant name // TODO: add validation on name; invariant name
@ -53,6 +60,11 @@ namespace SharpDbTools.Model
return dbModel; return dbModel;
} }
public static void Remove(string name)
{
cache.Remove(name);
}
public static DbModelInfo GetDbModelInfo(string name) { public static DbModelInfo GetDbModelInfo(string name) {
DbModelInfo modelInfo = null; DbModelInfo modelInfo = null;
bool exists = cache.TryGetValue(name, out modelInfo); bool exists = cache.TryGetValue(name, out modelInfo);

27
src/AddIns/Misc/SharpDbTools/Project/Src/ServerBrowserTool.cs

@ -194,25 +194,28 @@ namespace SharpDbTools
ConnectionStringDefinitionDialog definitionDialog = new ConnectionStringDefinitionDialog(); ConnectionStringDefinitionDialog definitionDialog = new ConnectionStringDefinitionDialog();
DialogResult result = definitionDialog.ShowDialog(); DialogResult result = definitionDialog.ShowDialog();
// if the dialog was cancelled then do nothing
if (result == DialogResult.Cancel) {
return;
}
// if the dialog was submitted and connection string has changed then clear the DbModelInfo metadata // if the dialog was submitted and connection string has changed then clear the DbModelInfo metadata
// note that is is not required for the Connection string to be valid - it may be work // note that is is not required for the Connection string to be valid - it may be work
// in progress and a user might want to save a partially formed connection string // in progress and a user might want to save a partially formed connection string
if (result == DialogResult.OK) {
DbModelInfo dbModelInfo = DbModelInfoService.GetDbModelInfo(connectionLogicalName);
string connectionString = dbModelInfo.ConnectionString;
string newConnectionString = definitionDialog.ConnectionString;
if (connectionString == null && newConnectionString != null) {
//dbModelInfo.ConnectionString = newConnectionString;
//dbModelInfo.InvariantName = // TODO: START HERE sort out invariant name
} //else
}
// if the dialog was cancelled then do nothing DbModelInfo dbModelInfo = DbModelInfoService.GetDbModelInfo(connectionLogicalName);
string connectionString = dbModelInfo.ConnectionString;
string newConnectionString = definitionDialog.ConnectionString;
if (newConnectionString == null) {
return;
}
if ((connectionString == null) || (!((newConnectionString.Equals(connectionString))))) {
dbModelInfo.ConnectionString = newConnectionString;
dbModelInfo.InvariantName = definitionDialog.InvariantName;
}
} }
} }
class DbModelInfoContextMenuStrip : ContextMenuStrip class DbModelInfoContextMenuStrip : ContextMenuStrip

Loading…
Cancel
Save