Quel est le moyen le plus simple et le plus facile à gérer de créer une source de données ODBC SQL Server?

StackOverflow https://stackoverflow.com/questions/170466

Question

J'ai besoin d'une méthode de programmation pour créer une source de données ODBC SQL Server. Je peux le faire en accédant directement au registre. Ce serait mieux si cela pouvait être fait via une API disponible (SQL Server / Windows) pour se protéger contre les modifications dans les clés de registre ou les valeurs avec les pilotes SQL Server mis à jour.

Réponse acceptée Remarque: l'utilisation de SQLConfigDataSource extrait le code des détails des clés de registre, etc., ce qui le rend plus robuste. J'espérais cependant que SQL Server l'aurait enveloppé d'une fonction de niveau supérieur prenant des attributs fortement typés (plutôt qu'une chaîne délimitée) et les exposant via le pilote.

Était-ce utile?

La solution

SQLConfigDataSource () effectue le travail.

Article MSDN

Juste au cas où voici un exemple VB6:

Const ODBC_ADD_DSN = 1 'user data source
Const ODBC_ADD_SYS_DSN = 4 'system data source

Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" (ByVal
hwndParent As Long, ByVal fRequest As Long, ByVal lpszDriver As String, ByVal
lpszAttributes As String) As Long

strDriver = "SQL Server"
strAttributes = "DSN=Sample" & Chr$(0) _
& "Database=Northwind" & Chr$(0) _
& "Description= Sample Data Source" & Chr$(0) _
& "Server=(local)" & Chr$(0) _
& "Trusted_Connection=No" & Chr$(0)

SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, strDriver, strAttributes)

Autres conseils

Pour VB.NET, cela peut être fait de la manière suivante:

Importer pour 'DllImport':

Imports System.Runtime.InteropServices

Déclaration de SQLConfigDataSource:

<DllImport("ODBCCP32.DLL")> Shared Function SQLConfigDataSource _
(ByVal hwndParent As Integer, ByVal fRequest As Integer, _
    ByVal lpszDriver As String, _
    ByVal lpszAttributes As String) As Boolean
End Function

Exemple d'utilisation:

Const ODBC_ADD_DSN = 1 'User data source
Const ODBC_ADD_SYS_DSN = 4 'System data source

Public Function CreateSqlServerDataSource
    Dim strDriver As String : strDriver = "SQL Server"
    Dim strAttributes As String : strAttributes = _
        "DSN=Sample" & Chr(0) & _
        "Database=Northwind" & Chr(0) & _
        "Description= Sample Data Source" & Chr(0) & _
        "Server=(local)" & Chr(0) & _
        "Trusted_Connection=No" & Chr(0)

    SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, strDriver, strAttributes)
End Function

Je voudrais utiliser odbcad32.exe qui se trouve dans votre dossier system32.

Ceci ajoutera vos sources de données odbc à l'emplacement correct, qui ne sera affecté par aucun correctif.

Pour ce faire directement dans le registre, vous pouvez ajouter une valeur de chaîne à:

HKLM\SOFTWARE\Microsoft\ODBC\ODBC.INI\ODBC Data Sources

pour ajouter un DSN système, ou:

HKCU\Software\ODBC\ODBC.INI\ODBC Data Sources

pour ajouter un DSN utilisateur.

Le nom de la valeur est le nom de la source de données que vous voulez créer et les données doivent être 'SQL Server'.

Au même niveau que "Sources de données ODBC" dans le registre, créez une clé portant le nom de la source de données à créer.

Cette clé nécessite les valeurs de chaîne suivantes:

Database     - Name of default database to which to connect
Description  - A description of the Data Source
Driver       - C:\WINDOWS\system32\SQLSRV32.dll
LastUser     - Name of a database user (e.g. sa)
Server       - Hostname of machine on which database resides

Par exemple, en utilisant l'application reg.exe à partir de la ligne de commande pour ajouter une source de données utilisateur appelée 'ExampleDSN':

reg add "HKCU\Software\ODBC\ODBC.INI\ODBC Data Sources" 
    /v ExampleDSN /t REG_SZ /d "SQL Server"
reg add HKCU\Software\ODBC\ExampleDSN 
    /v Database /t REG_SZ /d ExampleDSN
reg add HKCU\Software\ODBC\ExampleDSN 
    /v Description /t REG_SZ /d "An Example Data Source"
reg add HKCU\Software\ODBC\ExampleDSN
    /v Driver /t REG_SZ /d "C:\WINDOWS\system32\SQLSRV32.DLL"
reg add HKCU\Software\ODBC\ExampleDSN
    /v LastUser /t REG_SZ /d sa
reg add HKCU\Software\ODBC\ExampleDSN
    /v Server /t REG_SZ /d localhost

Exemple utilisant C #:

(Référence détaillée des paramètres SQL Server à l'adresse http://msdn.microsoft. com / fr-us / library / aa177860.aspx )

using System.Runtime.InteropServices; 

        private enum RequestFlags : int
        {

            ODBC_ADD_DSN = 1,
            ODBC_CONFIG_DSN = 2,
            ODBC_REMOVE_DSN = 3,
            ODBC_ADD_SYS_DSN = 4,
            ODBC_CONFIG_SYS_DSN = 5,
            ODBC_REMOVE_SYS_DSN = 6,
            ODBC_REMOVE_DEFAULT_DSN = 7

        }

        [DllImport("ODBCCP32.DLL", CharSet = CharSet.Unicode, SetLastError = true)]
        private static extern bool SQLConfigDataSource(UInt32 hwndParent, RequestFlags  fRequest, 
                                 string lpszDriver, string lpszAttributes);

        public static void CreateDSN()
        {

            string strDrivername = "SQL Server";
            string strConfig =  "DSN=StackOverflow\0" +
                                   "Database=Northwind\0" +
                                   "Description=StackOverflow Sample\0" +
                                   "Server=(local)\0" +
                                   "Trusted_Connection=No\0";

            bool success = SQLConfigDataSource(0, RequestFlags.ODBC_ADD_SYS_DSN, strDrivername, strConfig);

        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top