Click here to Skip to main content
Licence 
First Posted 12 Feb 2004
Views 84,787
Bookmarked 39 times

Using DataLinks to get or edit a connection string

By | 9 Mar 2004 | Article
Accessing DataLinks from a .NET program to get or edit a connection string.

Sample Image - DataLinks.gif

Introduction

A similar article was written on this subject but this article deals with accessing DataLinks from a .NET program to get or edit a connection string. Your project must reference DataLinks and ADODB, then execute the PromptNew or PromptEdit methods.

Step by step procedure

  1. Reference ADODB in your project. This is required to read the COM object passed back from DataLinks. This file is located here: c:\Program Files\Microsoft.NET\Primary Interop Assemblies\adodb.dll
  2. Reference DataLinks in your project. DataLinks used to be MSDASC.dll, but has changed to OLEDB32.DLL (see KB). This file is located here: C:\Program Files\Common Files\System\Ole DB\OLEDB32.DLL
  3. Create a text box and a button on a Windows Form. In the button's click event, use this code:
private void ButtonGetConnectionString_Click(object sender, 
  System.EventArgs e)
{
   /* 
        Reference DataLinks
        NOTE: Reference 
              C:\Program Files\Common Files\System\Ole DB\OLEDB32.DLL
              (Was MSDASC.dll) 
        SEE:
           http://support.microsoft.com:80/support/kb/articles/Q225/1/32.asp
   */
      MSDASC.DataLinks dataLinks = new MSDASC.DataLinksClass();
      //note that a reference to: 
      //  c:\Program Files\Microsoft.NET\Primary Interop Assemblies\adodb.dll
      //is also required to read the ADODB._Connection result
      ADODB._Connection connection;                         
      //are we editing an existing connect string or getting a new one?
      if(this.txtConnectionString.Text==String.Empty)
      {     
            // get a new connection string
            try   
            {           
               //Prompt user for new connect string
               connection = (ADODB._Connection)dataLinks.PromptNew();
               //read result
               this.txtConnectionString.Text=
                    connection.ConnectionString.ToString();
            }
            catch(Exception ex)     
            {
                  MessageBox.Show(ex.ToString());     
            }
      }
      else
      {     
            // edit connection string
            connection=new ADODB.ConnectionClass();
            connection.ConnectionString=this.txtConnectionString.Text;
            //set local COM compatible data type
            object oConnection=connection;
            try   
            {     
                  //prompt user to edit the given connect string
                  if((bool)dataLinks.PromptEdit(ref oConnection))
                  {
                        this.txtConnectionString.Text=
                             connection.ConnectionString;
                  }
            }
            catch(Exception ex)
            {
                  MessageBox.Show(ex.ToString());     
            }
      }
}

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

DanMayer

Web Developer

United States United States

Member



Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralProblem with the waitcursor PinmemberPrimozPayton2:44 25 Aug '08  
GeneralSqlClient Issue with Provider Property PinmemberBrady Kelly23:07 28 Jul '07  
GeneralNo need for interop PinmemberSergey Prokhorenko23:38 24 Jun '07  
GeneralRe: No need for interop PinmemberSergey Prokhorenko23:42 24 Jun '07  
GeneralRe: No need for interop PinmemberBrady Kelly22:58 28 Jul '07  
GeneralSpeed Pinmemberakorolev100:24 3 Oct '04  
GeneralGreat! Give me exact what I am looking for Pinmemberzhoulhh7:39 1 Jul '04  
GeneralPromptEdit(ref connectionString) PinmemberUnderEducated10:33 10 Mar '04  
GeneralRe: PromptEdit(ref connectionString) PinmemberDanMayer10:55 10 Mar '04  
GeneralRe: PromptEdit(ref connectionString) PinmemberUnderEducated12:03 10 Mar '04  
GeneralRe: PromptEdit(ref connectionString) [modified] Pinmembermlgray23:06 3 Jul '06  
Here is a partial solution to the password issue. With PromptEdit (because it takes a reference to an ADODB.Connection instance) you can setup the Connection object that you pass to PromptEdit so that you can get the password. The Connection class has a Properties member that is a collection of key/value pairs (although the values can be, and often are, null). Many of the properties included in the collection are familiar ("Initial Catalog", "Data Source", "Password", etc.). And one of those properties is "Persist Security Info". You can get and modify this property with the folloing bit of code:
 
ADODB.Connection connection = new ADODB.Connection();
ADODB.Property persistProperty = connection.Properties["Persist Security Info"];
persistProperty.Value = true;
 
This causes some non-intuitive behavior:
1) The "Provider" tab will not appear in the dialog box.
2) The ConnectionString property of the Connection instance will still not include the password (unless the user checks the "Allow saving password" check box).
3) (This is the important bit.) The "Password" property will contain the password that the user enters, regardless of what the user does with the "Allow saving password" check box.
4) Coming out, the "Persist Security Info" will refelect the state of the "Allow saving password" check box.
5) Setting the "Persist Security Info" does not set the default state of the "Allow saving password" check box, but setting other properties (such as "Initial Catalog") does set default values in the dialog box.
 
I have not been able to find a away around the "Provider" tab disappearing. Since I am only interested in SQL databases (for the moment), I just set the "Provider" property on the Connection object before calling PromptEdit as follows:
 
connection.Provider = "SQLOLEDB.1";
 
For some reason any access of the "Properties" method of the Connection instance that you pass to PromptEdit prior to calling PromptEdit will cause the "Provider" tab to disappear. This is true even if you just get the count for the properties collection.
 
In any case, the password can be retrieved with this line of code:
 
string password = connection.Properties["Password"].Value.ToString();
 
Remember that the ConnectionString property may or may not include the password, so you will likely not be able to just use the connection string without some processing.
 

 
-- modified at 5:06 Tuesday 4th July, 2006
GeneralRe: PromptEdit(ref connectionString) Pinmemberyetty20006:10 26 Oct '07  
GeneralRe: Very Slow... PinmemberVHsu19:41 13 Feb '04  
GeneralRe: Very Slow... PinmemberDanMayer6:45 14 Feb '04  
GeneralRe: Very Slow... Pinsussmgarins4:20 19 Feb '04  
GeneralRe: Very Slow... PinmemberRicardo Casquete23:55 17 Feb '06  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web02 | 2.5.120529.1 | Last Updated 10 Mar 2004
Article Copyright 2004 by DanMayer
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid