2009-10-14 6 views
0

Je souhaite utiliser une boîte de dialogue standard pour solliciter l'entrée utilisateur d'une chaîne de connexion ADO.net. Il est trivial de faire pour la chaîne de connexion OLEDB comme décrit ici: MSDN Article on MSDASC.DataLinks().PromptExiste-t-il une boîte de dialogue standard pour la construction d'une chaîne de connexion ADO.Net (redistribuable)?

J'ai aussi trouvé des exemples qui utilisent Microsoft.Data.ConnectionUI.dll et MicrosoftData.ConnectionUI.Dialog.dll de VS (HOWTO: Using the Choose Data Source dialog of Visual Studio 2005 from your own code).

Malheureusement, ces DLL ne sont pas autorisées pour la redistribution.

Existe-t-il une boîte de dialogue standard pour choisir une source de données pouvant être distribuée avec mon application?

+0

double possible de [? Y at-il un libre "Ajouter une connexion" ou "Connexion SQL" Dialog] (http://stackoverflow.com/questions/567981/is-there- a-free-add-connection-ou-sql-connection-dialog) – kjbartel

Répondre

2

Le code source pour ces DLL est maintenant disponible: http://blogs.msdn.com/b/vsdata/archive/2010/02/02/data-connection-dialog-source-code-is-released-on-code-gallery.aspx

Aussi, vous pouvez le faire par programmation en utilisant les propriétés DataLink:

Ajoutez la référence à ADODB.DLL (à partir de la référence .NET) et à la bibliothèque de types Microsoft OLE DB Service Component 1.0 dans l'onglet COM de votre onglet de référence Visual Studio.

using ADODB; 
using Microsoft.Win32; 
public partial class ConnectionStringStep : Form 
    { 
     private const string MSSQL_PROVIDER = "Provider=SQLOLEDB.1"; 

     private const string ORACLE_PROVIDER = "Provider=MSDAORA.1"; 

     private const string MSSQL = "MSSQL"; 

     public ConnectionStringStep() 
     { 
      InitializeComponent(); 
     } 


     private static string DataBaseType() 
     { 
      //get the data from some previous screen or some kind of storage 
      return MyStorage.GetProperty("DATABASE_TYPE") ?? "MSSQL"; 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      var dataBaseType = DataBaseType(); 

      var adodbConnection = new Connection 
             { 
              ConnectionString = dataBaseType == MSSQL ? MSSQL_PROVIDER : ORACLE_PROVIDER 
             }; 

      object connection = (object) adodbConnection; 

      var dialog = new MSDASC.DataLinks(); 

      dialog.PromptEdit(ref connection); 

      connectionTextBox.Text = adodbConnection.ConnectionString; 
     } 
    } 

DataLink Properties Reference

0

Il est lié, mais je suis maintenant sûr comment vous pouvez intégrer ce comportement dans votre application.

Chaque fois que j'en ai besoin, je crée un fichier texte vide, change son extension de fichier en ".udl" et double-clique dessus; quand j'ai fini, je ferme cette application, renommez ce fichier en ".txt" et ouvrez avec le bloc-notes.

+0

C'est comme ça que je le fais aussi, sauf que je le crée par programmation. Ce n'est pas si facile que ça, il faut mettre quelques coutumes mais au début. Cette technique est "discutable", au moins sur les systèmes Windows. –

+0

Semble que cela donne le même fournisseur OLE DB, pas le fournisseur ADO.Net. – Chasler

+0

Voir ma réponse si vous voulez savoir comment ** programmer ** faire l'astuce de fichier «UDL» :) –

0

Il semble qu'une telle bête n'existe pas. J'ai écrit mon propre dialogue et je peux l'inclure dans des projets au besoin.


Mise à jour:

Le code source pour ces DLL sont maintenant disponibles selon la réponse de @ code4life.

1

Il y a maintenant un paquet NuGet par Microsoft fournissant cette boîte de dialogue:

DataConnectionDialog.

Exemple d'utilisation:

var dialog = new DataConnectionDialog(); 
dialog.DataSources.Add(DataSource.SqlDataSource); 
dialog.ConnectionString = connectionString; 

if (DataConnectionDialog.Show(dialog) == System.Windows.Forms.DialogResult.OK) 
{ 
    connectionString = dialog.ConnectionString; 
}