Click here to Skip to main content
11,796,394 members (71,256 online)
Click here to Skip to main content

Dynamically adding DSN-names

, 6 Jul 2004 116.1K 1.7K 51
Rate this:
Please Sign up or sign in to vote.
A simple class to dynamically add DSN-names to your system.


First, let me start by saying that normally I use a OLEDB-connection to my database. But after coming across a bug in the .NET Framework (on a European, in this case Dutch, Windows system, the decimal point is lost due to the different symbol), I had no other choice than to use ODBC. Now there is no problem with ODBC, it works fine. Except,... those damn DSN-names. Not wanting to add the DSN-names myself, I surfed the Net and found... well, virtually nothing. After finding some hints in a Microsoft forum, I decided to write this article on using an API-call to dynamically create DSN-names.

Building the class

Import API

In order to import the ODBCCP32.dll which contains our API-call, we have to include the InteropServices namespace.

using System.Runtime.InteropServices;

Now it is time to import the DLL and create our property:

private static extern bool SQLConfigDataSource(
    IntPtr parent, int request, string driver, string attributes);

The parent parameter refers to the parent window handle and can be set to 0. The request parameter is a number from 1 to 6 and refers to the requested action. This is a list of the values and their actions:

  1. ODBC_ADD_DSN (use this to add a user DSN)
  2. ODBC_CONFIG_DSN (use this to configure a user DSN)
  3. ODBC_REMOVE_DSN (use this to remove a user DSN)
  4. ODBC_ADD_SYS_DSN (use this to add a system DSN)
  5. ODBC_CONFIG_SYS_DSN (use this to configure a system DSN)
  6. ODBC_REMOVE_SYS_DSN (use this to remove a system DSN)

The driver parameter is the name of the driver, and the attributes parameter contains the database path and other login information.

Creating our methods

Now, it is time to create easy to use methods. Let us say that we always connect to a Microsoft Access database (for now). In that case, we only have to provide the DSN-name and database path. In this case, our AddUserDSN method will be:

public bool AddUserDSN(string DSName, string DBPath)
  return SQLConfigDataSource((IntPtr)0, 1, 
     "Microsoft Access Driver (*.MDB)\0",
     "DSN=" + DSName + "\0Uid=Admin\0pwd=\0DBQ=" + DBPath + "\0");

The method will return true if the action is successful. We now can call our method using the following syntax:

DSNAdmin.AddUserDSN("MyDSNName", "C:\MyDBPath\MyDB.mdb");

No more messing around in the configuration screen, users can now change their DB path without having to worry about changing DSN-properties.


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

Bas Goedemans
Web Developer
Netherlands Netherlands
I am a programmer at a software company that creates software for training companies. (

You may also be interested in...

Comments and Discussions

GeneralMy vote of 5 Pin
Member 28714320-Jul-10 19:19
memberMember 28714320-Jul-10 19:19 
GeneralAdd to a remote computer Pin
vincedr22-Aug-06 3:54
membervincedr22-Aug-06 3:54 
QuestionRe: Add to a remote computer Pin
Ognjenk21-Dec-06 23:07
memberOgnjenk21-Dec-06 23:07 
GeneralVB.Net Version with Corrected Type Declarations Pin
atomicfroman8-Aug-06 9:43
memberatomicfroman8-Aug-06 9:43 
Generalreading data from a CSV file. Pin
BhargavaJK29-Jun-06 22:20
memberBhargavaJK29-Jun-06 22:20 
Questionhow to show DSN box dynamically Pin
vytheeswaran27-Jan-06 19:40
membervytheeswaran27-Jan-06 19:40 
GeneralProblem in Microsoft Text Driver Pin
siva_218117-Apr-05 18:58
membersiva_218117-Apr-05 18:58 
GeneralRe: Problem in Microsoft Text Driver Pin
Alexandros20051020-Jan-06 1:48
memberAlexandros20051020-Jan-06 1:48 
Generalsystem dsn for sql server Pin
Sytem DSN for SQL Server30-Mar-05 9:44
sussSytem DSN for SQL Server30-Mar-05 9:44 
GeneralRe: system dsn for sql server Pin
Bas Goedemans30-Mar-05 22:01
memberBas Goedemans30-Mar-05 22:01 
GeneralRe: system dsn for sql server Pin
Sytem DSN for SQL Server31-Mar-05 11:29
sussSytem DSN for SQL Server31-Mar-05 11:29 
GeneralRe: system dsn for sql server Pin
Mike Ballou6-Jun-05 10:26
memberMike Ballou6-Jun-05 10:26 
GeneralRe: system dsn for sql server Pin
ronyVain2-Nov-06 0:59
memberronyVain2-Nov-06 0:59 
GeneralRe: system dsn for sql server Pin
jp_netvision22-Nov-05 21:48
memberjp_netvision22-Nov-05 21:48 
GeneralSystem dsn for sql server UID and PWD issue Pin
cpg8329-May-06 22:00
membercpg8329-May-06 22:00 
GeneralSorry, nobody can help you Pin
Andraxx13-Jul-07 7:57
memberAndraxx13-Jul-07 7:57 
GeneralRe: Sorry, nobody can help you Pin
cskanth18-Sep-07 9:25
membercskanth18-Sep-07 9:25 
GeneralRe: system dsn for sql server Pin
tania_karenina29-Jan-07 13:57
membertania_karenina29-Jan-07 13:57 
GeneralNeed Help Pin
Derek Smigelski19-Oct-04 5:32
sussDerek Smigelski19-Oct-04 5:32 
GeneralRe: Need Help Pin
Bas Goedemans19-Oct-04 23:45
memberBas Goedemans19-Oct-04 23:45 
GeneralRe: Need Help Pin
bits_625-Nov-06 19:32
memberbits_625-Nov-06 19:32 
QuestionSame with registry? Pin
Lars [Large] Werner7-Jul-04 10:48
memberLars [Large] Werner7-Jul-04 10:48 
AnswerRe: Same with registry? Pin
Bas Goedemans8-Jul-04 0:52
memberBas Goedemans8-Jul-04 0:52 

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.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.151002.1 | Last Updated 7 Jul 2004
Article Copyright 2004 by Bas Goedemans
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid