Browse Source

removed SharpDbTools

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1794 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Dickon Field 20 years ago
parent
commit
c0dfc6ae04
  1. 21
      src/AddIns/Misc/SharpDbTools/Project/Configuration/AssemblyInfo.cs
  2. 25
      src/AddIns/Misc/SharpDbTools/Project/Resources/MyUserControl.xfrm
  3. 22
      src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.addin
  4. 61
      src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.csproj
  5. 34
      src/AddIns/Misc/SharpDbTools/Project/Src/Data/ColumnNames.cs
  6. 181
      src/AddIns/Misc/SharpDbTools/Project/Src/Data/DbModelInfo.cs
  7. 283
      src/AddIns/Misc/SharpDbTools/Project/Src/Data/DbModelInfoService.cs
  8. 29
      src/AddIns/Misc/SharpDbTools/Project/Src/Data/TableNames.cs
  9. 239
      src/AddIns/Misc/SharpDbTools/Project/Src/Forms/ConnectionStringDefinitionDialog.Designer.cs
  10. 257
      src/AddIns/Misc/SharpDbTools/Project/Src/Forms/ConnectionStringDefinitionDialog.cs
  11. 126
      src/AddIns/Misc/SharpDbTools/Project/Src/Forms/ConnectionStringDefinitionDialog.resx
  12. 100
      src/AddIns/Misc/SharpDbTools/Project/Src/Forms/GetConnectionLogicalNameDialog.Designer.cs
  13. 46
      src/AddIns/Misc/SharpDbTools/Project/Src/Forms/GetConnectionLogicalNameDialog.cs
  14. 120
      src/AddIns/Misc/SharpDbTools/Project/Src/Forms/GetConnectionLogicalNameDialog.resx
  15. 454
      src/AddIns/Misc/SharpDbTools/Project/Src/Forms/ServerBrowserTool.cs
  16. 72
      src/AddIns/Misc/SharpDbTools/Project/Src/Forms/TableDescribeViewContent.cs
  17. 1
      src/AddIns/Misc/SharpQuery/SharpQuery.csproj

21
src/AddIns/Misc/SharpDbTools/Project/Configuration/AssemblyInfo.cs

@ -1,21 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Dickon Field" email=""/>
// <version>$Revision$</version>
// </file>
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following
// attributes.
//
// change them to the information which is associated with the assembly
// you compile.
[assembly: AssemblyTitle("SharpDbTools")]
[assembly: AssemblyDescription("Addin for SharpDevelop 2.0")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

25
src/AddIns/Misc/SharpDbTools/Project/Resources/MyUserControl.xfrm

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Components version="1.0">
<System.Windows.Forms.UserControl>
<Name value="MyUserControl" />
<ClientSize value="{Width=230, Height=160}" />
<Controls>
<System.Windows.Forms.Button>
<Name value="testButton" />
<Location value="{X=63,Y=97}" />
<Text value="A button" />
<Size value="{Width=75, Height=23}" />
<Anchor value="None" />
<FlatAppearance value="System.Windows.Forms.FlatButtonAppearance" />
<TabIndex value="1" />
</System.Windows.Forms.Button>
<System.Windows.Forms.Label>
<Name value="label1" />
<Location value="{X=38,Y=19}" />
<Text value="Hello, World!" />
<Size value="{Width=100, Height=23}" />
<TabIndex value="0" />
</System.Windows.Forms.Label>
</Controls>
</System.Windows.Forms.UserControl>
</Components>

22
src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.addin

@ -1,22 +0,0 @@
<AddIn name = "SharpDbTools"
author = "Dickon Field"
url = ""
description = "A collection of components and tools to help develop db-aware apps">
<Manifest>
<Identity name = "ICSharpCode.SharpDbTools"/>
</Manifest>
<Runtime>
<Import assembly = "SharpDbTools.dll"/>
</Runtime>
<Path name = "/SharpDevelop/Workbench/Pads">
<Pad id = "SharpDbToolsPad"
category = "Main"
title = "Server Explorer"
icon = "PadIcons.Output"
shortcut = "Control|Alt|D"
class = "SharpDbTools.ServerBrowserTool"/>
</Path>
</AddIn>

61
src/AddIns/Misc/SharpDbTools/Project/SharpDbTools.csproj

@ -1,61 +0,0 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<OutputType>Library</OutputType>
<RootNamespace>SharpDbTools</RootNamespace>
<AssemblyName>SharpDbTools</AssemblyName>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{413A467D-7EA1-4C40-B10B-D6832B94DD6E}</ProjectGuid>
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
<NoStdLib>False</NoStdLib>
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<BaseAddress>4194304</BaseAddress>
<PlatformTarget>AnyCPU</PlatformTarget>
<FileAlignment>4096</FileAlignment>
<WarningLevel>4</WarningLevel>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
<IntermediateOutputPath>obj\Debug\</IntermediateOutputPath>
<OutputPath>..\..\..\..\..\AddIns\AddIns\Misc\SharpDbTools\</OutputPath>
<Optimize>False</Optimize>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugSymbols>true</DebugSymbols>
<DebugType>Full</DebugType>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
<IntermediateOutputPath>obj\Release\</IntermediateOutputPath>
<OutputPath>..\..\..\..\..\AddIns\AddIns\Misc\SharpDbTools\</OutputPath>
<Optimize>True</Optimize>
<DefineConstants>TRACE</DefineConstants>
<DebugSymbols>false</DebugSymbols>
<DebugType>None</DebugType>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\MyUserControl.xfrm" />
<Compile Include="Configuration\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project>
<Name>ICSharpCode.SharpDevelop</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\Core\Project\ICSharpCode.Core.csproj">
<Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project>
<Name>ICSharpCode.Core</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

34
src/AddIns/Misc/SharpDbTools/Project/Src/Data/ColumnNames.cs

@ -1,34 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Dickon Field" email=""/>
// <version>$Revision$</version>
// </file>
/*
* User: dickon
* Date: 30/07/2006
* Time: 23:37
*
*/
using System;
namespace SharpDbTools.Data
{
/// <summary>
/// Description of Columns.
/// </summary>
public sealed class ColumnNames
{
public const string InvariantName = "invariantName";
public const string Name = "name";
public const string ConnectionString = "connectionString";
public const string TableName = "TABLE_NAME";
public static string[] TableTableFieldsToDisplay =
new string [] {"COLUMN_NAME", "DATATYPE",
"LENGTH", "PRECISION", "SCALE", "NULLABLE"};
public static string[] TableTableFieldsColumnHeaders =
new string[] { "Column", "Type", "Length", "Precision", "Scale", "Nullable" };
}
}

181
src/AddIns/Misc/SharpDbTools/Project/Src/Data/DbModelInfo.cs

@ -1,181 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Dickon Field" email=""/>
// <version>$Revision$</version>
// </file>
/*
* User: Dickon Field
* Date: 10/07/2006
* Time: 09:12
*
*/
using System;
using System.Data;
using System.Data.Common;
using System.Collections.Generic;
using ICSharpCode.Core;
namespace SharpDbTools.Data
{
/// <summary>
/// DbModel is a DataSet containing the metadata tables returned from a DbConnection.
/// It adds methods designed specifically to facilitate access to the data in the
/// DataTables contained by the DbModel.
///
/// The DbModel class is intended to be usable in a fully disconnected mode - that is,
/// it requires a DbConnection to populate it, but it may then be locally persisted and subsequently
/// retrieved from its persisted data. This is intended to allow work to progress against the
/// DbModel without requiring a connection to its RDB server.
/// </summary>
///
public class DbModelInfo: DataSet
{
public const string METADATACOLLECTIONS = "MetaDataCollections";
public DbModelInfo() : base()
{
}
public DbModelInfo(string name) : base()
{
DataTable table = CreateConnectionInfoTable();
// add the first and only column of this table;
table.Rows.Add(new object[] {name, null, null});
}
public DbModelInfo(string name, string invariantName, string connectionString): base()
{
DataTable table = CreateConnectionInfoTable();
// add the first and only column of this table;
table.Rows.Add(new object[] {name, invariantName, connectionString});
}
public string Name {
get {
DataTable table = this.Tables[TableNames.ConnectionInfo];
string name = table.Rows[0][ColumnNames.Name] as string;
return name;
}
}
public string InvariantName {
get {
DataTable table = this.Tables[TableNames.ConnectionInfo];
string invariantName = null;
try {
invariantName = table.Rows[0][ColumnNames.InvariantName] as string;
}
catch(ArgumentException) {
// see comment below - it is correct to bury this exception
//LoggingService.Info("InvariantName property was accessed while undefined" + e);
}
return invariantName;
}
set {
DataTable table = this.Tables[TableNames.ConnectionInfo];
string invariantName = table.Rows[0][ColumnNames.InvariantName] as string;
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.Clear();
DataTable newTable = CreateConnectionInfoTable();
// add the first and only column of this table;
newTable.Rows.Add(new object[] {name, invariantName, connectionString});
}
}
}
public string ConnectionString {
get {
DataTable table = this.Tables[TableNames.ConnectionInfo];
string connectionString = null;
try {
connectionString = table.Rows[0][ColumnNames.ConnectionString] as string;
}
catch(ArgumentException) {
// this simply indicates that this attribute was not defined when the
// DbModelInfo was saved, returning null makes sense here - so it is
// correct to bury this exception
//LoggingService.Info("InvariantName property was accessed while undefined" + e);
}
return connectionString;
}
set {
DataTable table = this.Tables[TableNames.ConnectionInfo];
string connectionString = this.ConnectionString;
if (connectionString == null) {
table.Rows[0][ColumnNames.ConnectionString] = value;
}
else if (!(connectionString.Equals(value))) {
string invariantName = this.InvariantName;
string name = this.Name;
this.Clear();
// add the first and only column of this table;
table.Rows.Add(new object[] {name, invariantName, value});
}
}
}
public void SetConnectionInfo(string invariantName, string connectionString)
{
string name = this.Name;
SetConnectionInfo(name, invariantName, connectionString);
}
public void SetConnectionInfo(string name, string invariantName,
string connectionString)
{
this.Clear();
DataTable table = CreateConnectionInfoTable();
// add the first and only column of this table;
table.Rows.Add(new object[] {name, invariantName, connectionString});
}
private DataTable CreateConnectionInfoTable()
{
// create a table in the DbModelInfo to hold this initial info.
// this creates a consistent representation of the data and makes
// it easier to serialise it
DataTable table = this.Tables.Add(TableNames.ConnectionInfo);
table.Columns.Add(ColumnNames.Name, typeof(string));
table.Columns.Add(ColumnNames.InvariantName, typeof(string));
table.Columns.Add(ColumnNames.ConnectionString, typeof(string));
return table;
}
public void ClearMetaData()
{
DataTable metadataCollectionsTable = this.MetaDataCollections;
if (metadataCollectionsTable != null) {
foreach (DataRow collectionRow in metadataCollectionsTable.Rows) {
String collectionName = (string)collectionRow[0];
this.Tables.Remove(collectionName);
}
}
}
public DataTable MetaDataCollections {
get {
return this.Tables[METADATACOLLECTIONS];
}
}
public DataTable this[string collectionName] {
get {
return this.Tables[collectionName];
}
}
}
}

283
src/AddIns/Misc/SharpDbTools/Project/Src/Data/DbModelInfoService.cs

@ -1,283 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Dickon Field" email=""/>
// <version>$Revision$</version>
// </file>
/*
* User: dickon
* Date: 28/07/2006
* Time: 21:55
*
*/
using System;
using System.Data;
using System.Data.Common;
using System.Collections.Generic;
using System.IO;
using ICSharpCode.Core;
namespace SharpDbTools.Data
{
/// <summary>
/// Manages a collection of DbModelInfo:
/// - retrieval from files
/// - opening (essentially refreshing) from a database connection
/// - adding for new connection data (name, invariant name, connection string)
/// - saving to files
/// </summary>
public static class DbModelInfoService
{
static string saveLocation = null;
static object lockObject = new Object();
const string dbFilesDir = "DbTools";
static SortedList<string, DbModelInfo> cache = new SortedList<string, DbModelInfo>();
public static IList<string> Names {
get {
return cache.Keys;
}
}
/// <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)
{
// TODO: add validation on name; invariant name
// assume that connection string is valid - if it fails an exception will be thrown later
// this allows partially defined connection strings at least to be saved and worked on later
DbModelInfo dbModel = new DbModelInfo(name, invariantName, connectionString);
// add to cache
cache.Add(name, dbModel);
return dbModel;
}
public static void Remove(string name)
{
cache.Remove(name);
}
public static DbModelInfo GetDbModelInfo(string name) {
DbModelInfo modelInfo = null;
bool exists = cache.TryGetValue(name, out modelInfo);
return modelInfo;
}
public static DataTable GetTableInfo(string modelName, string tableName)
{
LoggingService.Debug("-->GetTableInfo");
DbModelInfo modelInfo = GetDbModelInfo(modelName);
DataTable columnTable = modelInfo.Tables[TableNames.Columns];
DataRow[] columnsMetadata = columnTable.Select(ColumnNames.TableName + "='" + tableName + "'");
LoggingService.Debug("found: " + columnsMetadata.Length + " columns belonging to table: " + tableName);
DataTable tableInfo = new DataTable();
DataColumnCollection cols = columnTable.Columns;
foreach (DataColumn c in cols) {
DataColumn nc = new DataColumn(c.ColumnName, c.DataType);
tableInfo.Columns.Add(nc);
}
foreach (DataRow r in columnsMetadata) {
DataRow newRow = tableInfo.NewRow();
newRow.ItemArray = r.ItemArray;
tableInfo.Rows.Add(newRow);
tableInfo.AcceptChanges();
}
return tableInfo;
}
public static DbModelInfo LoadMetadataFromConnection(string name)
{
// get the DbModelInfo
DbModelInfo modelInfo = null;
bool exists = cache.TryGetValue(name, out modelInfo);
if (!exists)
{
// TODO: more detail...
throw new KeyNotFoundException();
}
// get the invariant name and connection string
string invariantName = modelInfo.InvariantName;
string connectionString = modelInfo.ConnectionString;
// get a connection - wait until a connection has been successfully made
// before clearing the DbModelInfo
DbProvidersService factoryService = DbProvidersService.GetDbProvidersService();
DbConnection connection = null;
try {
DbProviderFactory factory = factoryService.GetFactoryByInvariantName(invariantName);
connection = factory.CreateConnection();
modelInfo.ClearMetaData();
// reload the metadata from the connection
// get the Schema table
connection.ConnectionString = connectionString;
connection.Open();
DataTable schemaInfo = connection.GetSchema();
// clear the DbModelInfo prior to refreshing from the connection
modelInfo.ClearMetaData();
// iterate through the rows in it - the first column of each is a
// schema info collection name that can be retrieved as a DbTable
// Add each one to the DbModel DataSet
foreach (DataRow collectionRow in schemaInfo.Rows) {
String collectionName = (string)collectionRow[0];
DataTable nextMetaData = connection.GetSchema(collectionName);
modelInfo.Merge(nextMetaData);
}
return modelInfo;
}
catch(Exception e) {
LoggingService.Fatal("Exception caught while trying to retrieve database metadata: " + e);
throw e;
}
finally {
connection.Close();
}
}
/// <summary>
///
/// </summary>
/// <param name="name">the logical name of the DbModelInfo to save to a file</param>
/// <param name="overwriteExistingFile">if true, any existing file will be overwritten</param>
/// <returns>true if the DbModelInfo was saved, false if not. It will not be saved if
/// either overwriteExistingFile is set to true, and there is an existing file</returns>
public static bool SaveToFile(string name, bool overwriteExistingFile)
{
string path = GetSaveLocation();
DbModelInfo modelInfo = null;
cache.TryGetValue(name, out modelInfo);
if (modelInfo != null) {
string modelName = modelInfo.Name;
// write to a file in 'path' called <name>.metadata
// TODO: may want to consider ways of making this more resilient
string filePath = path + @"\" + name + ".metadata";
LoggingService.Debug("writing metadata to: " + filePath);
if (File.Exists(filePath)) {
if (overwriteExistingFile) {
File.Delete(filePath);
} else {
return false;
}
}
using (StreamWriter sw = File.CreateText(filePath)) {
string xml = modelInfo.GetXml();
sw.Write(xml);
sw.Flush();
sw.Close();
return true;
}
} else {
throw new DbModelInfoDoesNotExistException(name);
}
}
public static void SaveAll()
{
foreach (string name in cache.Keys) {
SaveToFile(name, true);
}
}
public static void LoadNamesFromFiles()
{
// load DbModelInfo's from file system
string saveLocation = GetSaveLocation();
LoggingService.Debug("looking for metadata files at: " + saveLocation);
string[] files = Directory.GetFileSystemEntries(saveLocation);
cache.Clear();
for (int i = 0; i < files.Length; i++) {
LoggingService.Debug("found to load metadata from: " + files[i]);
int start = files[i].LastIndexOf('\\');
int end = files[i].LastIndexOf('.');
start++;
string name = files[i].Substring(start, end - start);
DbModelInfo nextModel = new DbModelInfo(name);
cache.Add(nextModel.Name, nextModel);
}
}
public static void LoadFromFiles()
{
// load DbModelInfo's from file system
string saveLocation = GetSaveLocation();
string[] files = Directory.GetFiles(saveLocation);
cache.Clear();
for (int i = 0; i < files.Length; i++) {
DbModelInfo nextModel = LoadFromFileAtPath(@files[i]);
cache.Add(nextModel.Name, nextModel);
}
}
private static DbModelInfo LoadFromFileAtPath(string filePath)
{
LoggingService.Debug("loading DbModelInfo from filePath: " + filePath);
DbModelInfo nextModel = new DbModelInfo();
nextModel.ReadXml(filePath);
return nextModel;
}
public static void LoadFromFile(string logicalConnectionName)
{
LoggingService.Debug("loading DbModelInfo for name: " + logicalConnectionName);
string saveLocation = GetSaveLocation();
string path = saveLocation + "\\" + logicalConnectionName + ".metadata";
DbModelInfo info = LoadFromFileAtPath(path);
cache.Remove(logicalConnectionName);
cache.Add(logicalConnectionName, info);
}
private static string GetSaveLocation()
{
// append the path of the directory for saving Db files
if (saveLocation == null) {
lock(lockObject) {
string configDir = PropertyService.ConfigDirectory;
saveLocation = configDir + @"\" + dbFilesDir;
saveLocation = saveLocation.Replace("/", @"\");
}
}
if (!Directory.Exists(saveLocation)) {
Directory.CreateDirectory(@saveLocation);
}
return saveLocation;
}
}
public class DbModelInfoDoesNotExistException: ApplicationException
{
string name;
public DbModelInfoDoesNotExistException(string dbModelInfoName): base()
{
this.name = dbModelInfoName;
}
public string Name {
get {
return name;
}
}
}
}

29
src/AddIns/Misc/SharpDbTools/Project/Src/Data/TableNames.cs

@ -1,29 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Dickon Field" email=""/>
// <version>$Revision$</version>
// </file>
/*
* User: dickon
* Date: 30/07/2006
* Time: 23:35
*
*/
using System;
namespace SharpDbTools.Data
{
/// <summary>
/// Description of Tables.
/// </summary>
public sealed class TableNames
{
public const string MetaDataCollections = "MetaDataCollections";
public const string ConnectionInfo = "ConnectionInfo";
public static string[] PrimaryObjects = new string[] { "Tables", "Procedures", "Functions", "Views", "Users" };
public const string Columns = "Columns";
}
}

239
src/AddIns/Misc/SharpDbTools/Project/Src/Forms/ConnectionStringDefinitionDialog.Designer.cs generated

@ -1,239 +0,0 @@
/*
* Responsibilities:<br>
* <br>
* Collaboration:<br>
* <br>
* User: ${USER}
* Date: ${DATE}
* Time: ${TIME}
*
*/
namespace SharpDbTools.Forms
{
partial class ConnectionStringDefinitionDialog : System.Windows.Forms.Form
{
/// <summary>
/// Designer variable used to keep track of non-visual components.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Disposes resources used by the form.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
}
}
base.Dispose(disposing);
}
/// <summary>
/// This method is required for Windows Forms designer support.
/// Do not change the method contents inside the source code editor. The Forms designer might
/// not be able to load this method if it was changed manually.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.connStringPropertyGrid = new System.Windows.Forms.PropertyGrid();
this.buttonsFlowLayoutPanel = new System.Windows.Forms.FlowLayoutPanel();
this.testButton = new System.Windows.Forms.Button();
this.submitButton = new System.Windows.Forms.Button();
this.cancelButton = new System.Windows.Forms.Button();
this.providerTypeComboBox = new System.Windows.Forms.ComboBox();
this.dataSourceTypeLabel = new System.Windows.Forms.Label();
this.connStringResult = new System.Windows.Forms.TextBox();
this.connectionStringLabel = new System.Windows.Forms.Label();
this.progressTimer = new System.Windows.Forms.Timer(this.components);
this.statusStrip = new System.Windows.Forms.StatusStrip();
this.outputMessageTabControl = new System.Windows.Forms.TabControl();
this.connectionStringTab = new System.Windows.Forms.TabPage();
this.testResultTab = new System.Windows.Forms.TabPage();
this.testResultTextBox = new System.Windows.Forms.TextBox();
this.buttonsFlowLayoutPanel.SuspendLayout();
this.outputMessageTabControl.SuspendLayout();
this.connectionStringTab.SuspendLayout();
this.testResultTab.SuspendLayout();
this.SuspendLayout();
//
// connStringPropertyGrid
//
this.connStringPropertyGrid.Location = new System.Drawing.Point(0, 39);
this.connStringPropertyGrid.Name = "connStringPropertyGrid";
this.connStringPropertyGrid.Size = new System.Drawing.Size(547, 300);
this.connStringPropertyGrid.TabIndex = 0;
//
// buttonsFlowLayoutPanel
//
this.buttonsFlowLayoutPanel.Controls.Add(this.testButton);
this.buttonsFlowLayoutPanel.Controls.Add(this.submitButton);
this.buttonsFlowLayoutPanel.Controls.Add(this.cancelButton);
this.buttonsFlowLayoutPanel.Location = new System.Drawing.Point(3, 447);
this.buttonsFlowLayoutPanel.Name = "buttonsFlowLayoutPanel";
this.buttonsFlowLayoutPanel.Size = new System.Drawing.Size(312, 34);
this.buttonsFlowLayoutPanel.TabIndex = 1;
//
// testButton
//
this.testButton.Location = new System.Drawing.Point(3, 3);
this.testButton.Name = "testButton";
this.testButton.Size = new System.Drawing.Size(75, 23);
this.testButton.TabIndex = 0;
this.testButton.Text = "Test";
this.testButton.UseVisualStyleBackColor = true;
this.testButton.Click += new System.EventHandler(this.TestButtonClick);
//
// submitButton
//
this.submitButton.Location = new System.Drawing.Point(84, 3);
this.submitButton.Name = "submitButton";
this.submitButton.Size = new System.Drawing.Size(75, 23);
this.submitButton.TabIndex = 1;
this.submitButton.Text = "Submit";
this.submitButton.UseVisualStyleBackColor = true;
this.submitButton.Click += new System.EventHandler(this.SubmitButtonClick);
//
// cancelButton
//
this.cancelButton.Location = new System.Drawing.Point(165, 3);
this.cancelButton.Name = "cancelButton";
this.cancelButton.Size = new System.Drawing.Size(75, 23);
this.cancelButton.TabIndex = 2;
this.cancelButton.Text = "Cancel";
this.cancelButton.UseVisualStyleBackColor = true;
this.cancelButton.Click += new System.EventHandler(this.CancelButtonClick);
//
// providerTypeComboBox
//
this.providerTypeComboBox.FormattingEnabled = true;
this.providerTypeComboBox.Location = new System.Drawing.Point(117, 12);
this.providerTypeComboBox.Name = "providerTypeComboBox";
this.providerTypeComboBox.Size = new System.Drawing.Size(195, 21);
this.providerTypeComboBox.TabIndex = 2;
this.providerTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.ProviderTypeSelectedIndexChanged);
//
// dataSourceTypeLabel
//
this.dataSourceTypeLabel.Location = new System.Drawing.Point(3, 9);
this.dataSourceTypeLabel.Name = "dataSourceTypeLabel";
this.dataSourceTypeLabel.Size = new System.Drawing.Size(108, 23);
this.dataSourceTypeLabel.TabIndex = 3;
this.dataSourceTypeLabel.Text = "Data Source Type:";
this.dataSourceTypeLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// connStringResult
//
this.connStringResult.Enabled = false;
this.connStringResult.Location = new System.Drawing.Point(0, 0);
this.connStringResult.Multiline = true;
this.connStringResult.Name = "connStringResult";
this.connStringResult.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.connStringResult.Size = new System.Drawing.Size(413, 74);
this.connStringResult.TabIndex = 4;
//
// connectionStringLabel
//
this.connectionStringLabel.Location = new System.Drawing.Point(12, 348);
this.connectionStringLabel.Name = "connectionStringLabel";
this.connectionStringLabel.Size = new System.Drawing.Size(100, 23);
this.connectionStringLabel.TabIndex = 5;
this.connectionStringLabel.Text = "Connection String:";
//
// progressTimer
//
this.progressTimer.Interval = 1000;
this.progressTimer.Tick += new System.EventHandler(this.ProgressTimerTick);
//
// statusStrip
//
this.statusStrip.Location = new System.Drawing.Point(0, 478);
this.statusStrip.Name = "statusStrip";
this.statusStrip.Size = new System.Drawing.Size(547, 22);
this.statusStrip.TabIndex = 6;
this.statusStrip.Text = "statusStrip1";
//
// testResultTab
//
this.outputMessageTabControl.Controls.Add(this.connectionStringTab);
this.outputMessageTabControl.Controls.Add(this.testResultTab);
this.outputMessageTabControl.Location = new System.Drawing.Point(118, 345);
this.outputMessageTabControl.Name = "testResultTab";
this.outputMessageTabControl.SelectedIndex = 0;
this.outputMessageTabControl.Size = new System.Drawing.Size(417, 100);
this.outputMessageTabControl.TabIndex = 7;
//
// tabPage1
//
this.connectionStringTab.Controls.Add(this.connStringResult);
this.connectionStringTab.Location = new System.Drawing.Point(4, 22);
this.connectionStringTab.Name = "tabPage1";
this.connectionStringTab.Padding = new System.Windows.Forms.Padding(3);
this.connectionStringTab.Size = new System.Drawing.Size(409, 74);
this.connectionStringTab.TabIndex = 0;
this.connectionStringTab.Text = "Connection String";
this.connectionStringTab.UseVisualStyleBackColor = true;
//
// tabPage2
//
this.testResultTab.Controls.Add(this.testResultTextBox);
this.testResultTab.Location = new System.Drawing.Point(4, 22);
this.testResultTab.Name = "tabPage2";
this.testResultTab.Padding = new System.Windows.Forms.Padding(3);
this.testResultTab.Size = new System.Drawing.Size(409, 74);
this.testResultTab.TabIndex = 1;
this.testResultTab.Text = "Test Result Message";
this.testResultTab.UseVisualStyleBackColor = true;
//
// testResultTextBox
//
this.testResultTextBox.Location = new System.Drawing.Point(-5, 0);
this.testResultTextBox.Multiline = true;
this.testResultTextBox.Name = "testResultTextBox";
this.testResultTextBox.Size = new System.Drawing.Size(418, 77);
this.testResultTextBox.TabIndex = 0;
//
// ConnectionStringDefinitionDialog
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(547, 500);
this.Controls.Add(this.outputMessageTabControl);
this.Controls.Add(this.statusStrip);
this.Controls.Add(this.connectionStringLabel);
this.Controls.Add(this.dataSourceTypeLabel);
this.Controls.Add(this.providerTypeComboBox);
this.Controls.Add(this.buttonsFlowLayoutPanel);
this.Controls.Add(this.connStringPropertyGrid);
this.Name = "ConnectionStringDefinitionDialog";
this.Text = "Set up Connection String";
this.buttonsFlowLayoutPanel.ResumeLayout(false);
this.outputMessageTabControl.ResumeLayout(false);
this.connectionStringTab.ResumeLayout(false);
this.connectionStringTab.PerformLayout();
this.testResultTab.ResumeLayout(false);
this.testResultTab.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
private System.Windows.Forms.TabControl outputMessageTabControl;
private System.Windows.Forms.TextBox testResultTextBox;
private System.Windows.Forms.TabPage testResultTab;
private System.Windows.Forms.TabPage connectionStringTab;
private System.Windows.Forms.Timer progressTimer;
private System.Windows.Forms.StatusStrip statusStrip;
private System.Windows.Forms.TextBox connStringResult;
private System.Windows.Forms.Label connectionStringLabel;
private System.Windows.Forms.Label dataSourceTypeLabel;
private System.Windows.Forms.ComboBox providerTypeComboBox;
private System.Windows.Forms.Button cancelButton;
private System.Windows.Forms.Button submitButton;
private System.Windows.Forms.Button testButton;
private System.Windows.Forms.FlowLayoutPanel buttonsFlowLayoutPanel;
private System.Windows.Forms.PropertyGrid connStringPropertyGrid;
}
}

257
src/AddIns/Misc/SharpDbTools/Project/Src/Forms/ConnectionStringDefinitionDialog.cs

@ -1,257 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Dickon Field" email=""/>
// <version>$Revision: 1684 $</version>
// </file>
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Data.Common;
using System.ComponentModel;
using SharpDbTools.Data;
namespace SharpDbTools.Forms
{
/// <summary>
/// This class creates a dialog that can be used to create and test connection strings
/// that can be used with .net 2.0 DbProviders.
/// It utilises .net 2.0 configuration to discover any DbProviderFactories that are
/// installed and configured in machine.config, app.config or user.config using
/// standard .net 2.0 apis.
/// It then enables a user to browse the properties of each type of db connection,
/// set values for them and test the resulting connection string.
/// When the submit button is clicked the dialog is dismissed and the connection
/// string constructed is accessible through the ConnectionString property of the dialog.
/// </summary>
public partial class ConnectionStringDefinitionDialog
{
ToolStripProgressBar connectionTestProgressBar = new ToolStripProgressBar();
ConnectionTestBackgroundWorker testConnectionBackgroundWorker;
string resultMessage;
string invariantName;
ConnectionTestState connectionTestState = ConnectionTestState.UnTested;
public ConnectionStringDefinitionDialog()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
this.connStringPropertyGrid.PropertyValueChanged +=
new PropertyValueChangedEventHandler(this.ConnStringAttributesViewPropertyValueChanged);
// add a ProgressBar to the statusString
this.statusStrip.Items.Add(connectionTestProgressBar);
this.connectionTestProgressBar.Step = 10;
this.connectionTestProgressBar.Minimum = 0;
this.connectionTestProgressBar.Maximum = 150;
}
public string InvariantName {
get {
return this.invariantName;
}
set {
this.invariantName = value;
}
}
public ConnectionTestState ConnectionTestState {
get {
return this.connectionTestState;
}
}
public string ResultMessage
{
get
{
return resultMessage;
}
set
{
resultMessage = value;
}
}
public DbConnectionStringBuilder ConnectionStringBuilder
{
get
{
return (DbConnectionStringBuilder)this.connStringPropertyGrid.SelectedObject;
}
}
public string ConnectionString
{
get
{
return ((DbConnectionStringBuilder)this.connStringPropertyGrid.SelectedObject).ConnectionString;
}
}
protected override void OnLoad(EventArgs e)
{
//
// set the PropertyGrid to browse the available DbProviders
//
base.OnLoad(e);
DbProvidersService service = DbProvidersService.GetDbProvidersService();
List<string> names = service.Names;
this.providerTypeComboBox.DataSource = names;
this.connStringResult.Text = this.ConnectionString;
}
void CancelButtonClick(object sender, System.EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
void ProviderTypeSelectedIndexChanged(object sender, System.EventArgs e)
{
string selection = (string)this.providerTypeComboBox.SelectedItem;
DbProvidersService service = DbProvidersService.GetDbProvidersService();
DbProviderFactory factory = service[selection];
DbConnectionStringBuilder builder = factory.CreateConnectionStringBuilder();
connStringPropertyGrid.SelectedObject = builder;
}
void ConnStringAttributesViewPropertyValueChanged(Object s, PropertyValueChangedEventArgs args)
{
// looking for changes to the ConnectionString property in the PropertyGrid
this.connStringResult.Text = this.ConnectionString;
this.outputMessageTabControl.SelectTab(this.connectionStringTab);
ResetTestResultTextBox();
}
void TestButtonClick(object sender, System.EventArgs e)
{
string dbTypeName = (string)this.providerTypeComboBox.SelectedItem;
testConnectionBackgroundWorker = new ConnectionTestBackgroundWorker(dbTypeName);
testConnectionBackgroundWorker.WorkerSupportsCancellation = false;
progressTimer.Enabled = true;
testConnectionBackgroundWorker.DoWork +=
new DoWorkEventHandler(this.TestConnectionBackgroundWorkerDoWork);
testConnectionBackgroundWorker.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(TestConnectionRunWorkerComplete);
testConnectionBackgroundWorker.RunWorkerAsync();
}
void ProgressTimerTick(object sender, System.EventArgs e)
{
this.BeginInvoke(new EventHandler(UpdateProgressBar));
}
void UpdateProgressBar(object sender, EventArgs e)
{
ToolStripProgressBar p = connectionTestProgressBar;
if (p.Value == p.Maximum) p.Value = 0;
p.PerformStep();
}
void SetTestResultTextBox()
{
this.testResultTextBox.Text = ResultMessage;
this.outputMessageTabControl.SelectTab(this.testResultTab);
}
void ResetTestResultTextBox()
{
this.testResultTextBox.Text = "";
this.connectionTestState = ConnectionTestState.UnTested;
}
void TestConnectionBackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
{
DbConnection connection = null;
try
{
// get the current name
ConnectionTestBackgroundWorker bw = sender as ConnectionTestBackgroundWorker;
string currentDbTypeName = bw.DatabaseType;
// get the DbProviderFactory for this name
DbProvidersService service = DbProvidersService.GetDbProvidersService();
DbProviderFactory factory = service[currentDbTypeName];
// get a connection object or this factory
connection = factory.CreateConnection();
connection.ConnectionString = this.ConnectionString;
connection.Open();
e.Result = "Connection Succeeded";
connectionTestState = ConnectionTestState.TestSucceeded;
}
catch(Exception ex)
{
e.Result = "Connection Failed: " + ex.Message;
connectionTestState = ConnectionTestState.TestFailed;
}
finally
{
if (connection != null)
{
connection.Close();
}
}
}
void TestConnectionRunWorkerComplete(object sender, RunWorkerCompletedEventArgs args)
{
ResultMessage = args.Result as string;
this.Invoke(new EventHandler(TestConnectionCompleted));
}
void TestConnectionCompleted(object sender, EventArgs args)
{
progressTimer.Enabled = false;
connectionTestProgressBar.Value = 0;
SetTestResultTextBox();
testConnectionBackgroundWorker.Dispose();
}
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.Close();
}
}
public enum ConnectionTestState
{
UnTested,
TestFailed,
TestSucceeded
}
class ConnectionTestBackgroundWorker: BackgroundWorker
{
private string dbTypeName;
public ConnectionTestBackgroundWorker(string dbTypeName): base()
{
this.dbTypeName = dbTypeName;
}
public string DatabaseType
{
get
{
return dbTypeName;
}
}
}
}

126
src/AddIns/Misc/SharpDbTools/Project/Src/Forms/ConnectionStringDefinitionDialog.resx

@ -1,126 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="progressTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>247, 17</value>
</metadata>
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>371, 17</value>
</metadata>
</root>

100
src/AddIns/Misc/SharpDbTools/Project/Src/Forms/GetConnectionLogicalNameDialog.Designer.cs generated

@ -1,100 +0,0 @@
/*
* User: dickon
* Date: 04/08/2006
* Time: 22:21
*/
namespace SharpDbTools.Forms
{
partial class GetConnectionLogicalNameDialog : System.Windows.Forms.Form
{
/// <summary>
/// Designer variable used to keep track of non-visual components.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Disposes resources used by the form.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
}
}
base.Dispose(disposing);
}
/// <summary>
/// This method is required for Windows Forms designer support.
/// Do not change the method contents inside the source code editor. The Forms designer might
/// not be able to load this method if it was changed manually.
/// </summary>
private void InitializeComponent()
{
this.connectionName = new System.Windows.Forms.TextBox();
this.connectionNameOKButton = new System.Windows.Forms.Button();
this.connectionNameCancelButton = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// connectionName
//
this.connectionName.Location = new System.Drawing.Point(12, 33);
this.connectionName.MaxLength = 30;
this.connectionName.Name = "connectionName";
this.connectionName.Size = new System.Drawing.Size(292, 21);
this.connectionName.TabIndex = 0;
//
// connectionNameOKButton
//
this.connectionNameOKButton.Location = new System.Drawing.Point(66, 70);
this.connectionNameOKButton.Name = "connectionNameOKButton";
this.connectionNameOKButton.Size = new System.Drawing.Size(75, 23);
this.connectionNameOKButton.TabIndex = 1;
this.connectionNameOKButton.Text = "OK";
this.connectionNameOKButton.UseVisualStyleBackColor = true;
this.connectionNameOKButton.Click += new System.EventHandler(this.ConnectionNameOKButtonClick);
//
// connectionNameCancelButton
//
this.connectionNameCancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.connectionNameCancelButton.Location = new System.Drawing.Point(171, 70);
this.connectionNameCancelButton.Name = "connectionNameCancelButton";
this.connectionNameCancelButton.Size = new System.Drawing.Size(75, 23);
this.connectionNameCancelButton.TabIndex = 2;
this.connectionNameCancelButton.Text = "Cancel";
this.connectionNameCancelButton.UseVisualStyleBackColor = true;
this.connectionNameCancelButton.Click += new System.EventHandler(this.ConnectionNameCancelButtonClick);
//
// label1
//
this.label1.Location = new System.Drawing.Point(12, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(259, 23);
this.label1.TabIndex = 3;
this.label1.Text = "Please provide the name for your db connection:";
//
// GetConnectionLogicalNameDialog
//
this.AcceptButton = this.connectionNameOKButton;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.connectionNameCancelButton;
this.ClientSize = new System.Drawing.Size(316, 114);
this.Controls.Add(this.label1);
this.Controls.Add(this.connectionNameCancelButton);
this.Controls.Add(this.connectionNameOKButton);
this.Controls.Add(this.connectionName);
this.Name = "GetConnectionLogicalNameDialog";
this.Text = "Connection Name";
this.ResumeLayout(false);
this.PerformLayout();
}
private System.Windows.Forms.TextBox connectionName;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button connectionNameCancelButton;
private System.Windows.Forms.Button connectionNameOKButton;
}
}

46
src/AddIns/Misc/SharpDbTools/Project/Src/Forms/GetConnectionLogicalNameDialog.cs

@ -1,46 +0,0 @@
/*
* User: dickon
* Date: 04/08/2006
* Time: 22:21
*/
using System;
using System.Drawing;
using System.Windows.Forms;
namespace SharpDbTools.Forms
{
/// <summary>
/// Description of GetConnectionLogicalNameDialog.
/// </summary>
public partial class GetConnectionLogicalNameDialog
{
public GetConnectionLogicalNameDialog()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//
}
public string LogicalConnectionName {
get {
return this.connectionName.Text;
}
}
void ConnectionNameOKButtonClick(object sender, System.EventArgs e)
{
this.Close();
}
void ConnectionNameCancelButtonClick(object sender, System.EventArgs e)
{
this.Close();
}
}
}

120
src/AddIns/Misc/SharpDbTools/Project/Src/Forms/GetConnectionLogicalNameDialog.resx

@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

454
src/AddIns/Misc/SharpDbTools/Project/Src/Forms/ServerBrowserTool.cs

@ -1,454 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Dickon Field" email=""/>
// <version>$Revision: 1766 $</version>
// </file>
/*
* User: Dickon Field
* Date: 12/06/2006
* Time: 06:25
*/
using System;
using System.Windows.Forms;
using System.Data;
using System.Data.Common;
using System.Collections.Generic;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using SharpDbTools.Data;
namespace SharpDbTools.Forms
{
/// <summary>
/// Enables a user to browse metadata associated with a db server and to open resources
/// referenced therein. The intention is to extend this to other server processes over
/// time.
/// </summary>
public class ServerBrowserTool : AbstractPadContent
{
Panel ctl;
/// <summary>
/// ServerBrowserTool hosts one or more TreeViews providing views of types
/// of server. Currently it shows only relational database servers.
/// </summary>
public ServerBrowserTool()
{
LoggingService.Debug("Loading ServerBrowserTool");
ServerToolTreeView dbTree = new ServerToolTreeView();
dbTree.Dock = DockStyle.Fill;
ctl = new Panel();
ctl.Controls.Add(dbTree);
}
/// <summary>
/// The <see cref="System.Windows.Forms.Control"/> representing the pad
/// </summary>
public override Control Control {
get {
return ctl;
}
}
/// <summary>
/// Rebuildes the pad
/// </summary>
public override void RedrawContent()
{
// TODO: Rebuild the whole pad control here, renew all resource strings whatever
// Note that you do not need to recreate the control.
}
/// <summary>
/// Cleans up all used resources
/// </summary>
public override void Dispose()
{
ctl.Dispose();
}
}
class ServerToolTreeView : TreeView
{
public ServerToolTreeView(): base()
{
// this is the wrong place for this, but lets give it a go...
DbModelInfoService.LoadNamesFromFiles();
Rebuild();
}
/// <summary>
/// Rebuilds the database connection tree.
/// Should only be called from a delegate via Invoke or BeginInvoke.
/// </summary>
public void Rebuild()
{
this.BeginUpdate();
// TODO: put the Rebuild... behaviour into a view builder;
TreeNode dbNode = null;
TreeNode[] dbNodes = this.Nodes.Find("DatabaseExplorer", true);
// lets assume there is only one with this above name
if (dbNodes.Length == 0) {
LoggingService.Debug("could not find DatabaseExplorer Node, so creating it now");
dbNode = new TreeNode();
dbNode.Text = "Database Explorer";
dbNode.Name = "DatabaseExplorer";
this.Nodes.Add(dbNode);
} else {
dbNode = dbNodes[0];
}
// create the context menu for the database server node
ContextMenuStrip cMenu = new ContextMenuStrip();
ToolStripMenuItem addConnectionMenuItem =
new ToolStripMenuItem("Add Connection");
addConnectionMenuItem.Click += new EventHandler(AddDbConnectionClickHandler);
ToolStripMenuItem deleteConnectionMenuItem =
new ToolStripMenuItem("Delete Connection");
deleteConnectionMenuItem.Click += new EventHandler(DeleteDbConnectionClickHandler);
ToolStripMenuItem saveMetadataMenuItem =
new ToolStripMenuItem("Save All");
saveMetadataMenuItem.Click += new EventHandler(SaveDbModelInfoClickHandler);
cMenu.Items.AddRange(new ToolStripMenuItem[]
{
addConnectionMenuItem,
deleteConnectionMenuItem,
saveMetadataMenuItem
}
);
dbNode.ContextMenuStrip = cMenu;
// Rebuild each of the root nodes in the ServerToolTreeView
dbNode.Nodes.Clear();
foreach (string name in DbModelInfoService.Names) {
TreeNode dbModelInfoNode = CreateDbModelInfoNode(name);
TreeNode connectionNode = CreateConnectionPropertiesNode(name);
TreeNode metadataNode = CreateMetaDataNode(name);
dbModelInfoNode.Nodes.Add(connectionNode);
dbModelInfoNode.Nodes.Add(metadataNode);
dbNode.Nodes.Add(dbModelInfoNode);
}
this.EndUpdate();
}
public TreeNode CreateDbModelInfoNode(string name)
{
TreeNode treeNode = new TreeNode(name);
treeNode.Tag = "ConnectionRoot";
// create and add the menustrip for this node
NodeAwareContextMenuStrip cMenu = new NodeAwareContextMenuStrip(treeNode);
// create menu items
ToolStripMenuItem setConnectionStringMenuItem =
new ToolStripMenuItem("Set Connection String");
setConnectionStringMenuItem.Click += new EventHandler(SetConnectionStringOnDbModelInfoClickHandler);
ToolStripMenuItem loadMetadataFromConnectionMenuItem =
new ToolStripMenuItem("Load Metadata from Connection");
loadMetadataFromConnectionMenuItem.Click += new EventHandler(LoadMetadataFromConnectionClickHandler);
ToolStripMenuItem loadMetadataFromFileMenuItem =
new ToolStripMenuItem("Load Metadata from File");
loadMetadataFromFileMenuItem.Click += new EventHandler(LoadMetadataFromFileClickHandler);
cMenu.Items.AddRange(new ToolStripMenuItem[]
{
setConnectionStringMenuItem,
loadMetadataFromConnectionMenuItem,
loadMetadataFromFileMenuItem
});
treeNode.ContextMenuStrip = cMenu;
return treeNode;
}
/// <summary>
///
/// </summary>
/// <param name="name"></param>
/// <returns>a TreeNode representation of the connection properties
/// of the connection</returns>
public TreeNode CreateConnectionPropertiesNode(string name)
{
// create sub TreeNodes for the connection string and invariant name if they exist
DbModelInfo modelInfo = DbModelInfoService.GetDbModelInfo(name);
if (name == null) throw new KeyNotFoundException();
string connectionString = modelInfo.ConnectionString;
string invariantName = modelInfo.InvariantName;
TreeNode attributesNode = new TreeNode("Connection Properties");
if (connectionString != null) {
TreeNode cstringNode = new TreeNode("Connection String: " + connectionString);
attributesNode.Nodes.Add(cstringNode);
}
if (invariantName != null) {
TreeNode invNameNode = new TreeNode("Invariant Name: " + invariantName);
attributesNode.Nodes.Add(invNameNode);
}
return attributesNode;
}
public TreeNode CreateMetaDataNode(string name)
{
TreeNode metaNode = new TreeNode("Db Objects");
metaNode.Name = name + ":MetaData";
DbModelInfo info = DbModelInfoService.GetDbModelInfo(name);
DataTable metadataCollectionsTable = info.Tables[TableNames.MetaDataCollections];
if (metadataCollectionsTable != null) {
for (int i = 0; i < TableNames.PrimaryObjects.Length; i++) {
string metadataCollectionName = TableNames.PrimaryObjects[i];
LoggingService.Debug("looking for metadata: " + metadataCollectionName);
DataTable metaCollectionTable = info.Tables[metadataCollectionName];
LoggingService.Debug("found metadata collection: " + metadataCollectionName);
TreeNode collectionNode = new TreeNode(metadataCollectionName);
collectionNode.Name = name + ":Collection:" + metadataCollectionName;
metaNode.Nodes.Add(collectionNode);
foreach (DataRow dbObjectRow in metaCollectionTable.Rows) {
// TODO: >>>>>>>NEXT: at this point it is not enough to make this assumption - it doesn't hold
// for SQLServer for example, only for Oracle. The following text illustrates the difference between
// SQLServer and Oracle for the Users metadatacollection.
/*
* C:\workspace\ExampleDBFactories\DbExperiments\bin\Debug>DbExperiments.exe Users
uid user_name createdate updatedate
0 public 08/04/2003 09:10:19 14/10/2005 01:36:15
1 dbo 08/04/2003 09:10:19 08/04/2003 09:10:19
2 guest 08/04/2003 09:10:19 08/04/2003 09:10:19
3 INFORMATION_SCHEMA 14/10/2005 01:36:06 14/10/2005 01:36:06
4 sys 14/10/2005 01:36:06 14/10/2005 01:36:06
5 ##MS_AgentSigningCertificate## 26/08/2006 23:04:16 26/08/2006 23:04:16
16384 db_owner 08/04/2003 09:10:19 14/10/2005 01:36:15
16385 db_accessadmin 08/04/2003 09:10:19 14/10/2005 01:36:15
16386 db_securityadmin 08/04/2003 09:10:19 14/10/2005 01:36:15
16387 db_ddladmin 08/04/2003 09:10:19 14/10/2005 01:36:15
16389 db_backupoperator 08/04/2003 09:10:19 14/10/2005 01:36:15
16390 db_datareader 08/04/2003 09:10:19 14/10/2005 01:36:15
16391 db_datawriter 08/04/2003 09:10:19 14/10/2005 01:36:15
16392 db_denydatareader 08/04/2003 09:10:19 14/10/2005 01:36:15
16393 db_denydatawriter 08/04/2003 09:10:19 14/10/2005 01:36:15
C:\workspace\ExampleDBFactories\DbExperiments\bin\Debug>DbExperiments.exe Users
NAME ID CREATEDATE
ANONYMOUS 28 07/02/2006 22:40:15
CTXSYS 25 07/02/2006 22:38:38
DBSNMP 23 07/02/2006 22:35:21
DEV 36 26/07/2006 00:09:58
DIP 18 07/02/2006 22:17:03
FLOWS_020100 35 07/02/2006 22:52:43
FLOWS_FILES 34 07/02/2006 22:52:43
HR 33 07/02/2006 22:51:21
MDSYS 32 07/02/2006 22:44:47
OUTLN 11 07/02/2006 22:10:24
SYS 0 07/02/2006 22:10:13
SYSTEM 5 07/02/2006 22:10:13
TSMSYS 20 07/02/2006 22:27:15
XDB 27 07/02/2006 22:40:14
C:\workspace\ExampleDBFactories\DbExperiments\bin\Debug>
*
*
*/
TreeNode objectNode = null;
if (dbObjectRow.ItemArray.Length > 1) {
objectNode = new TreeNode((string)dbObjectRow[1]);
objectNode.Name = name + ":Object:" + (string)dbObjectRow[1];
} else {
objectNode = new TreeNode((string)dbObjectRow[0]);
objectNode.Name = name + ":Object:" + (string)dbObjectRow[0];
}
// HACK All this building stuff needs to be externalise I think
if (metadataCollectionName.Equals("Tables")) {
// add the handler to invoke describer
NodeAwareContextMenuStrip cMenu = new NodeAwareContextMenuStrip(objectNode);
ToolStripMenuItem invokeDescriberMenuItem = new ToolStripMenuItem("Describe");
invokeDescriberMenuItem.Click += new EventHandler(DescribeTableClickHandler);
cMenu.Items.Add(invokeDescriberMenuItem);
objectNode.ContextMenuStrip = cMenu;
}
// TreeNode ownerNode = new TreeNode("Owner: " + (string)dbObjectRow["OWNER"]);
// TreeNode typeNode = new TreeNode("Type: " + (string)dbObjectRow["TYPE"]);
// // TODO: add fields to each Table
// TreeNode fieldsNode = new TreeNode("Fields [TODO]");
// objectNode.Nodes.AddRange(new TreeNode[] {ownerNode, typeNode, fieldsNode });
collectionNode.Nodes.Add(objectNode);
}
}
}
return metaNode;
}
/// <summary>
/// Uses a dialog to get the logical name of a new Connection then
/// adds a new DbModelInfo for it to the cache and updates the DatabaseServer
/// Tree.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void AddDbConnectionClickHandler(object sender, EventArgs e)
{
LoggingService.Debug("add connection clicked");
// get the logical name of the new connection
string logicalName = null;
using (GetConnectionLogicalNameDialog dialog = new GetConnectionLogicalNameDialog()) {
dialog.ShowDialog();
logicalName = dialog.LogicalConnectionName;
}
if (logicalName.Equals("") || logicalName == null) return;
LoggingService.Debug("name received is: " + logicalName);
// add a new DbModelInfo to the cache
DbModelInfoService.Add(logicalName, null, null);
// rebuild the database server node
this.BeginInvoke(new MethodInvoker(this.Rebuild));
}
public void DeleteDbConnectionClickHandler(object sender, EventArgs e)
{
LoggingService.Debug("delete connection clicked");
}
public void SaveDbModelInfoClickHandler(object sender, EventArgs e)
{
// save each DbModelInfo separately, confirming overwrite where necessary
LoggingService.Debug("save all metadata clicked - will iterate through each and attempt to save");
IList<string> names = DbModelInfoService.Names;
foreach (string name in names) {
bool saved = DbModelInfoService.SaveToFile(name, false);
if (!saved) {
DialogResult result = MessageBox.Show("Overwrite existing file for connection: " + name + "?",
"File exists for connection", MessageBoxButtons.YesNo,
MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
if (result.Equals(DialogResult.Yes)) {
DbModelInfoService.SaveToFile(name, true);
}
}
}
}
public void LoadMetadataFromFileClickHandler(object sender, EventArgs e)
{
LoggingService.Debug("load metadata from file clicked");
string logicalConnectionName = getConnectionName(sender);
DbModelInfoService.LoadFromFile(logicalConnectionName);
this.BeginInvoke(new MethodInvoker(this.Rebuild));
}
private static string getConnectionName(object sender)
{
ToolStripMenuItem menuItem = sender as ToolStripMenuItem;
NodeAwareContextMenuStrip toolStrip = menuItem.Owner as NodeAwareContextMenuStrip;
TreeNode node = toolStrip.TreeNode;
while ((node.Tag == null) || (!node.Tag.Equals("ConnectionRoot"))) {
node = node.Parent;
}
string connectionLogicalName = node.Text;
return connectionLogicalName;
}
public void SetConnectionStringOnDbModelInfoClickHandler(object sender, EventArgs e)
{
string connectionLogicalName = getConnectionName(sender);
LoggingService.Debug("add connection string clicked for item with name: " + connectionLogicalName);
// use the ConnectionStringDefinitionDialog to get a connection string and invariant name
ConnectionStringDefinitionDialog definitionDialog = new ConnectionStringDefinitionDialog();
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
// 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
DbModelInfo dbModelInfo = DbModelInfoService.GetDbModelInfo(connectionLogicalName);
string connectionString = dbModelInfo.ConnectionString;
string newConnectionString = definitionDialog.ConnectionString;
if (newConnectionString == null) {
return;
}
dbModelInfo.ConnectionString = newConnectionString;
dbModelInfo.InvariantName = definitionDialog.InvariantName;
// rebuild the database explorer node
this.BeginInvoke(new MethodInvoker(this.Rebuild));
}
public void LoadMetadataFromConnectionClickHandler(object sender, EventArgs args)
{
string connectionLogicalName = getConnectionName(sender);
LoggingService.Debug("load metadata from connection clicked for connection with name: "
+ connectionLogicalName);
try {
DbModelInfoService.LoadMetadataFromConnection(connectionLogicalName);
}
catch(DbException e) {
MessageService.ShowError(e,
"An Exception was thrown while trying to connect to: " + connectionLogicalName);
}
}
public void DescribeTableClickHandler(object sender, EventArgs args)
{
string logicalConnectionName = getConnectionName(sender);
ToolStripMenuItem item = sender as ToolStripMenuItem;
NodeAwareContextMenuStrip s = item.Owner as NodeAwareContextMenuStrip;
string tableName = s.TreeNode.Text;
LoggingService.Debug("describe table clicked for: " + logicalConnectionName + " and table name: " + tableName);
DataTable tableInfo = DbModelInfoService.GetTableInfo(logicalConnectionName, tableName);
//DataSet dbModelInfo = DbModelInfoService.GetDbModelInfo(logicalConnectionName);
// TableDescribeForm describeForm = new TableDescribeForm(tableInfo);
// describeForm.Show();
TableDescribeViewContent tableDescribeViewContent = new TableDescribeViewContent(tableInfo, tableName);
WorkbenchSingleton.Workbench.ShowView(tableDescribeViewContent);
}
}
class NodeAwareContextMenuStrip : ContextMenuStrip
{
TreeNode treeNodeAttached;
public NodeAwareContextMenuStrip(TreeNode treeNodeAttached) : base()
{
this.treeNodeAttached = treeNodeAttached;
}
public TreeNode TreeNode {
get {
return treeNodeAttached;
}
}
}
}

72
src/AddIns/Misc/SharpDbTools/Project/Src/Forms/TableDescribeViewContent.cs

@ -1,72 +0,0 @@
/*
* User: dickon
* Date: 06/09/2006
* Time: 08:43
*
*/
using System;
using System.Data;
using System.Windows.Forms;
using ICSharpCode.SharpDevelop.Gui;
using SharpDbTools.Data;
namespace SharpDbTools.Forms
{
/// <summary>
/// Description of TableDescribeViewContent.
/// </summary>
public class TableDescribeViewContent : AbstractViewContent
{
DataTable tableInfo;
DataGridView tableInfoDataGridView;
public TableDescribeViewContent(DataTable tableInfo, string tableName) : base("table: " + tableName)
{
this.tableInfo = tableInfo;
this.tableInfoDataGridView = new DataGridView();
DataGridView v = this.tableInfoDataGridView;
v.AutoGenerateColumns = false;
v.AutoSize = true;
v.DataSource = this.tableInfo;
//v.DataMember = TableNames.Columns;
string[] fieldsToDisplay = ColumnNames.TableTableFieldsToDisplay;
string[] fieldColumnNames = ColumnNames.TableTableFieldsColumnHeaders;
for (int i = 0; i < fieldsToDisplay.Length; i++ ) {
DataGridViewColumn c = new DataGridViewTextBoxColumn();
c.DataPropertyName = fieldsToDisplay[i];
c.Name = fieldColumnNames[i];
v.Columns.Add(c);
}
v.AllowUserToAddRows = false;
v.AllowUserToDeleteRows = false;
v.AllowUserToResizeRows = false;
v.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
v.AutoResizeColumns();
}
public override System.Windows.Forms.Control Control {
get {
return this.tableInfoDataGridView;
}
}
public override bool IsReadOnly {
get {
return true;
}
}
public override bool IsViewOnly {
get {
return true;
}
}
}
}

1
src/AddIns/Misc/SharpQuery/SharpQuery.csproj

@ -65,7 +65,6 @@
<Compile Include="Src\GUI\AbstractSharpQueryNode.cs" /> <Compile Include="Src\GUI\AbstractSharpQueryNode.cs" />
<Compile Include="Src\GUI\SharpQueryDataView.cs" /> <Compile Include="Src\GUI\SharpQueryDataView.cs" />
<Compile Include="Src\GUI\SQLParameterInput.cs"> <Compile Include="Src\GUI\SQLParameterInput.cs">
<SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Src\GUI\ISharpQueryNode.cs" /> <Compile Include="Src\GUI\ISharpQueryNode.cs" />
<Compile Include="Src\GUI\SharpQueryPad.cs" /> <Compile Include="Src\GUI\SharpQueryPad.cs" />

Loading…
Cancel
Save