usuario tipos services origen datos crear contraseña configurar conexiones conexion con cadena sql-server odbc datasource dsn

sql-server - tipos - crear origen de datos odbc access



¿Cuál es la forma más simple y sostenible de crear un origen de datos ODBC de SQL Server? (5)

Para hacer esto directamente en el registro, puede agregar un valor de cadena a:

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

para agregar un DSN del sistema, o:

HKCU/Software/ODBC/ODBC.INI/ODBC Data Sources

para agregar un DSN de usuario.

El Nombre del Valor es el nombre de la Fuente de Datos que desea crear y los Datos deben ser ''Servidor SQL''.

En el mismo nivel que ''Fuentes de datos ODBC'' en el Registro, cree una clave con el nombre del origen de datos que desea crear.

Esta clave necesita los siguientes valores de cadena:

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

Por ejemplo, usando la aplicación reg.exe desde la línea de comando para agregar un origen de datos de usuario llamado ''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

Necesito una forma programática de crear un origen de datos ODBC de SQL Server. Puedo hacer esto accediendo directamente al Registro. Sería mejor si esto se pudiera hacer a través de una API disponible (SQL Server / Windows) para protegerse contra los cambios en las claves de registro o valores con los controladores actualizados de SQL Server.

Nota de respuesta aceptada: El uso de SQLConfigDataSource abstrae el código de los detalles de las claves del Registro, etc., por lo que es más sólido. Tenía la esperanza, sin embargo, de que SQL Server hubiera envuelto esto con una función de nivel superior que tomara atributos fuertemente tipados (en lugar de una cadena delimitada) y lo expusiera a través del controlador.


Utilizaría odbcad32.exe que se encuentra en su carpeta system32.

Esto agregará sus fuentes de datos odbc a la ubicación correcta, que no se verá afectada por ningún parche.


Para VB.NET se puede hacer de esta manera:

Importar para ''DllImport'':

Imports System.Runtime.InteropServices

Declaración 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

Ejemplo de uso:

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


SQLConfigDataSource () hace el trabajo.

Artículo de MSDN

Por si acaso hay un ejemplo de 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)


Muestra usando C #:

(Referencia de param de SQL Server detallada en http://msdn.microsoft.com/en-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=/0" + "Database=Northwind/0" + "Description= Sample/0" + "Server=(local)/0" + "Trusted_Connection=No/0"; bool success = SQLConfigDataSource(0, RequestFlags.ODBC_ADD_SYS_DSN, strDrivername, strConfig); }