🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: chile.comp.programacion
Article #369

Re: Crear DSN con c#

#369
From: Pintamono
Date: Tue, 28 Oct 2008 14:18
404 lines
16957 bytes
Gracias,

habia visto un ejemplo en VB6 pero no me funciono y me demoraria mucho en 
traspasarlo a C#.


gato2008chile wrote:

> En VB6.0
> Option Explicit

> 'Constant Declaration
> Private Const ODBC_ADD_DSN = 1        ' Add data source
> Private Const ODBC_CONFIG_DSN = 2     ' Configure (edit) data source
> Private Const ODBC_REMOVE_DSN = 3     ' Remove data source

> Private Const ODBC_ADD_SYS_DSN = 4
> Private Const ODBC_CONFIG_SYS_DSN = 5
> Private Const ODBC_REMOVE_SYS_DSN = 6
> Private Const ODBC_REMOVE_DEFAULT_DSN = 7
> Private Const vbAPINull As Long = 0&  ' NULL Pointer


> 'Function Declare
> #If Win32 Then
>      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
> #Else
>      Private Declare Function SQLConfigDataSource Lib "ODBCINST.DLL" _
>      (ByVal hwndParent As Integer, ByVal fRequest As Integer, ByVal _
>      lpszDriver As String, ByVal lpszAttributes As String) As Integer
> #End If

> Public Function CrearDSN(ByVal strDriver As String, _
>              ByVal strAttributes As String, Optional tipo As Boolean = 
> False) As Boolean

> #If Win32 Then
>      Dim intRet As Long
> #Else
>      Dim intRet As Integer
> #End If
> If tipo = False Then
>       intRet = SQLConfigDataSource(vbAPINull, ODBC_ADD_DSN, _
>          strDriver, strAttributes)
> Else
>      intRet = SQLConfigDataSource(vbAPINull, ODBC_ADD_SYS_DSN, _
>          strDriver, strAttributes)
> End If
> If intRet Then
>      CrearDSN = True
> Else
>      CrearDSN = False
> End If
> End Function

> Public Function BorrarDSN(strDriver As String, _
>              strAttributes As String, Optional tipo As Boolean = False) 
> As Boolean
> #If Win32 Then
>      Dim intRet As Long
> #Else
>      Dim intRet As Integer
> #End If
> Dim cadena As String
> cadena = "DSN=" & strAttributes & Chr$(0)
> If tipo = False Then
>      intRet = SQLConfigDataSource(vbAPINull, ODBC_REMOVE_DSN, _
>          strDriver, strAttributes)
> Else
>      intRet = SQLConfigDataSource(vbAPINull, ODBC_REMOVE_SYS_DSN, _
>          strDriver, strAttributes)
> End If

> If intRet Then
>      BorrarDSN = True
> Else
>      BorrarDSN = False
> End If
> End Function

> Public Function AtributosCon(controlador As String, _
>          dsn As String, _
>          Servidor As String, _
>          basededatos As String, _
>          descripcion As String, _
>          Optional usuario As String = "", _
>          Optional clave As String = "") As String
> Dim cadena As String
> Dim cadena2 As String
> Dim posicion As Integer
> Dim posicion2 As Integer
> Dim tamano As Integer

> Select Case controlador
>      ' cadena de conexion para el servidor  de sqlserver
>      Case "SQL Server"
>          cadena = "DSN=" & dsn & Chr$(0)
>          posicion = InStr(Servidor, ";")
>          If posicion = 0 Then
>              cadena = cadena & "SERVER=" & Servidor & Chr$(0)
>          Else
>              posicion2 = InStr(Servidor, ":")
>              cadena2 = Left(Servidor, posicion2 - 1)
>              cadena = cadena & "SERVER=" & cadena2 & Chr$(0)
>              cadena2 = Left(Servidor, posicion - 1)
>              cadena = cadena & "Address=" & Servidor & Chr$(0)
>              cadena = cadena & "Network=DBMSSOCN" & Chr$(0)
>          End If
>         cadena = cadena & "DESCRIPTION=" & descripcion & Chr$(0)
>         cadena = cadena & "DATABASE=" & basededatos & Chr$(0)
>         cadena = cadena & "LANGUAGE=Spanish" & Chr$(0)
>         If usuario <> "" Then
>              cadena = cadena & "Trusted_Connection= No" & Chr$(0)
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>         Else
>              cadena = cadena & "Trusted_Connection= Yes" & Chr$(0)
>         End If

>      'cadena de conexion para microsoft accesss
>      Case "Microsoft Access Driver (*.mdb)"
>          cadena = "DSN=" & dsn & Chr$(0)
>          If InStr(Servidor, "mdw") = 0 Then
>              cadena = cadena & "DBQ=" & basededatos & Chr$(0)
>          Else
>              cadena = cadena & "DBQ=" & basededatos & Chr$(0)
>              cadena = cadena & "SYSTEMDB=" & Servidor & Chr$(0)
>          End If

>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If

>      'cadena de conexion para archivos de textos
>      Case "Microsoft Text Driver (*.txt; *.csv)"
>          cadena = "DSN=" & dsn & Chr$(0)
>          cadena = cadena & "DBQ=" & basededatos & Chr$(0)
>          cadena = cadena & "Extensions=asc,csv,tab,txt" & Chr$(0)
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If
>      'cadena de conexion odbc para archivos excel
>      Case "Microsoft Excel Driver (*.xls)"
>          cadena = "DSN=" & dsn & Chr$(0)
>          cadena = "DriverId=790" & Chr$(0)
>          cadena = cadena & "DBQ=" & basededatos & Chr$(0)
>          cadena2 = Left(cadena, InStrRev(basededatos, "\") - 1)
>          cadena = cadena & "DefaultDir=" & cadena2 & Chr$(0)
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If

>      'cadena de conexion odbc para  bases de datos dbase
>      Case "Microsoft dBase Driver (*.dbf)"
>          cadena = "DSN=" & dsn & Chr$(0)
>          cadena = "DriverID=277" & Chr$(0)
>          cadena = cadena & "DBQ=" & basededatos & Chr$(0)
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If

>      'cadena de conexion odbc para bases de datos paradox
>      Case "Microsoft Paradox Driver (*.db )"
>          cadena = "DSN=" & dsn & Chr$(0)
>          cadena = "DriverID=538" & Chr$(0)
>          cadena = cadena & "Fil=Paradox 5.X" & Chr$(0)
>          cadena = cadena & "DefaultDir=" & basededatos & Chr$(0)
>          cadena = cadena & "DBQ=" & basededatos & Chr$(0)
>          cadena = cadena & "CollatingSequence=ASCII" & Chr$(0)
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If

>      'cadena de conexion odbc para visual foxpro y foxpro
>      Case "Microsoft Visual FoxPro Driver", _
>           "Microsoft FoxPro Driver (*.dbf)"
>          cadena = "DSN=" & dsn & Chr$(0)
>          If InStr(basededatos, "dbf") = 0 Then

>             cadena = "SourceType=DBF" & Chr$(0)
>             cadena = cadena & "SourceDB=" & basededatos & Chr$(0)
>             cadena = cadena & "Exclusive=No" & Chr$(0)

>          Else
>              cadena = "SourceType=DBC" & Chr$(0)
>              cadena = cadena & "SourceDB=" & basededatos & Chr$(0)
>              cadena = cadena & "Exclusive=No" & Chr$(0)
>          End If
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If

>      'cadena de conexion odbc para bases de datos oracle via microsoft u 
> oracle
>      Case "Microsoft ODBC for Oracle", _
>           "Oracle ODBC Driver"
>          cadena = "DSN=" & dsn & Chr$(0)
>          If InStr(controlador, "Microsoft") Then
>              cadena = "Server=" & Servidor & Chr$(0)
>          End If
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If

>      'cadena de conexion odbc para mysql con controlador odbc 3.51
>      Case "MySQL ODBC 3.51 Driver"
>          cadena = "DSN=" & dsn & Chr$(0)
>          posicion = InStr(Servidor, ";")
>          If posicion = 0 Then
>              cadena = cadena & "SERVER=" & Servidor & Chr$(0)
>          Else
>              cadena2 = Left(Servidor, posicion - 1)
>              cadena = cadena & "SERVER=" & cadena2 & Chr$(0)
>              posicion2 = Len(Servidor) - posicion
>              cadena2 = Right(Servidor, posicion2)
>              cadena = cadena & "PORT=" & cadena2 & Chr$(0)
>          End If

>          cadena = cadena & "DATABASE=" & basededatos & Chr$(0)
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If
>          cadena = cadena & "OPTION=3" & Chr$(0)

>      'cadena de conexion odbc para bases en sistemas IBM AS/400
>      Case "Client Access ODBC Driver (32-bit)"
>          cadena = "DSN=" & dsn & Chr$(0)
>          cadena = cadena & "System=" & Servidor & Chr$(0)
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If

>      'cadena de conexion odbc para sistemas Informix version 2.5
>      Case "Informix-CLI 2.5 (32 Bit)"
>          cadena = "DSN=" & dsn & Chr$(0)
>          cadena = cadena & "SERVER=" & Servidor & Chr$(0)
>          cadena = cadena & "DATABASE=" & basededatos & Chr$(0)
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If

>      'cadena de conexion odbc para sistemas Informix version 3.30
>      Case "INFORMIX 3.30 32 BIT"
>          cadena = "DSN=" & dsn & Chr$(0)
>          tamano = Len(Servidor)
>          posicion = InStr(Servidor, ";")
>          cadena2 = Left(Servidor, posicion - 1)
>          cadena2 = cadena2 & "HOST=" & cadena2 & Chr$(0)
>          posicion = posicion + 1
>          posicion2 = InStr(posicion, Servidor, ";")
>          cadena2 = Mid(Servidor, posicion, _
>                      posicion2 - posicion)
>          cadena = cadena & "SERVER=" & cadena2 & Chr$(0)
>          posicion = posicion2 + 1
>          posicion2 = InStr(posicion, Servidor, ";")
>          cadena2 = Mid(Servidor, posicion, _
>                      posicion2 - posicion)
>          cadena = cadena & "SERVICE=" & cadena2 & Chr$(0)
>          posicion = posicion2
>          cadena2 = Right(Servidor, tamano - posicion)
>          cadena = cadena & "PROTOCOL=" & cadena2 & Chr$(0)
>          cadena = cadena & "DATABASE=" & basededatos & Chr$(0)
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If

>      'cadena de conexion odbc para sistemas interbase de easysoft
>      Case "Easysoft IB6 ODBC"
>          cadena = "DSN=" & dsn & Chr$(0)
>          cadena = cadena & "SERVER=" & Servidor & Chr$(0)
>          cadena = cadena & "DATABASE=" & basededatos & Chr$(0)
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If

>      'cadenas de conexion odbc para  sistemas interbase de intersolv
>      Case "INTERSOLV InterBase ODBC Driver (*.gdb)"
>          cadena = "DSN=" & dsn & Chr$(0)
>          cadena = cadena & "SERVER=" & Servidor & Chr$(0)
>          cadena = cadena & "DATABASE=" & basededatos & Chr$(0)
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If

>      'cadena de conexion odbc para sistemas Lotus Notes version 3.01
>      Case "Lotus NotesSQL 3.01 (32-bit) ODBC DRIVER (*.nsf)"
>          cadena = "DSN=" & dsn & Chr$(0)
>          cadena = cadena & "SERVER=" & Servidor & Chr$(0)
>          cadena = cadena & "DATABASE=" & basededatos & Chr$(0)
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If

>      'Uso del controlador  Sybase System 12 (or 12.5) Enterprise Open 
> Client ODBC Driver
>      'Uso del controlador  Sybase System 11 ODBC Driver
>      'Uso del controlador  Intersolv 3.10 Sybase ODBC Driver
>      Case "SYBASE ASE ODBC Driver", _
>          "SYBASE SYSTEM 11", _
>          "INTERSOLV 3.10 32-BIT Sybase"
>          cadena = "DSN=" & dsn & Chr$(0)
>          cadena = cadena & "SRVR=" & Servidor & Chr$(0)
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If

>      'cadena para el controlador ODBC Driver for Sybase SQL Anywhere
>      Case "Sybase SQL Anywhere 5.0"
>          cadena = "DSN=" & dsn & Chr$(0)
>          cadena = cadena & "DEFAULTDIR=" & Servidor & Chr$(0)
>          cadena = cadena & "DBF=" & basededatos & Chr$(0)
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If

>      Case Else
>          cadena = "DSN=" & dsn & Chr$(0)
>          cadena = cadena & "SERVER=" & Servidor & Chr$(0)
>          cadena = cadena & "DATABASE=" & basededatos & Chr$(0)
>          If usuario <> "" Then
>              cadena = cadena & "UID=" & usuario & Chr$(0)
>              cadena = cadena & "PWD=" & clave & Chr$(0)
>          End If
> End Select
>      AtributosCon = cadena
> End Function


> Pintamono escribi�:
>> Que tal,
>> 
>> Tengo que crear dos DSN para una aplicacion externa, el problema es que no 
>> he logrado hacerlo... he estado toda la ma�ana leyendo y revisando pero no 
>> logro nada...
>> 
>> Lo hago de la siguiente manera:
>> 
>> En una clase defino estas constantes
>> 
>> private const string ODBC_INI_DSN_KEY_NAME = "DSN=";
>> private const string ODBC_INI_FILE_PREFIX_NAME = "\0File Prefix=";
>> private const string ODBC_INI_UID_NAME = "\0Uid=";
>> private const string ODBC_INI_PWD_NAME = "\0pwd=";
>> private const string ODBC_INI_DBQ_NAME = "\0DBQ=";
>> private const string ODBC_INI_ACUODBC_DRIVER = "AcuODBC Driver"; //The 
>> Default Driver
>> private const string ODBC_INI_READONLY = "\0Read Only=";
>> private const string ODBC_INI_SERVER = "\0SERVER=";
>> private const string ODBC_INI_DNS_DESC ="\0DESCRIPTION=";
>> 
>> luego en un metodo le paso los parametros a utilizar
>> 
>> return SQLConfigDataSource((IntPtr)0, 4, OdbcDriverName,
>> 		ODBC_INI_DSN_KEY_NAME + DSName +
>> 		ODBC_INI_DNS_DESC + DSNDesc +
>> 		ODBC_INI_SERVER + DSNServ +
>> 		ODBC_INI_UID_NAME + DBUser +
>> 		ODBC_INI_PWD_NAME + DBPass +
>> 		ODBC_INI_DBQ_NAME + DBName +
>> 		ODBC_INI_READONLY + "FALSE" + "\0");
>> 
>> esto siempre me devuelve false...
>> 
>> al importar del API lo hago asi
>> 
>> [DllImport("ODBCCP32.dll")]
>> private static extern bool SQLConfigDataSource(IntPtr parent, int request, 
>> string driver, string attributes);
>> 
>> Es indispensable que le pase un servidor, el nombre de usuario y 
>> contrase�a ya que estos DSN apuntaran a distintos servidores...
>> 
>> Alguna idea de como hacer que funcione?
>> 
>> O alguna idea de como hacer traza de esto para saber en que falla?
>> 
>> Les agradecere cualquier ayuda que me permita terminar esto.
>> 
>> Saludos!
>> 
>> PD: tiene que ser DSN ya que la aplicacion externa esta desarrollada en 4D 
>> y solo se puede conectar a SQL por DSN.
>> 
>> 
>>
Technical Details
Message-ID: <95cf48b4f466aef5b7f0a344051490a4$1@usenet.no-ip.com>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!feeder.news-service.com!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!fu-berlin.de!news.nivel5.cl!not-for-mail
References: <95274da56ff516ad9ec126575d81067c$1@usenet.no-ip.com> <ge5h34$hbi$1@news.nivel5.cl>

Show Full Headers
Complete Article Headers
X-Google-Thread: 1593cb,7d9a80fa1aa5e602
X-Google-Attributes: gid1593cb,domainid0,public,usenet
X-Google-Language: ENGLISH,ASCII
Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!feeder.news-service.com!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!fu-berlin.de!news.nivel5.cl!not-for-mail
From: pintamono@NoMandeWeas.kk (Pintamono)
Newsgroups: chile.comp.programacion
Subject: Re: Crear DSN con c#
Date: Tue, 28 Oct 2008 11:18:01 -0300
Organization: Usenet Chile.* http://usenet.no-ip.com
Lines: 406
Message-ID: <95cf48b4f466aef5b7f0a344051490a4$1@usenet.no-ip.com>
References: <95274da56ff516ad9ec126575d81067c$1@usenet.no-ip.com> <ge5h34$hbi$1@news.nivel5.cl>
NNTP-Posting-Host: pc-107-194-83-200.cm.vtr.net
Mime-Version: 1.0
X-Trace: news.nivel5.cl 1225203485 23637 200.83.194.107 (28 Oct 2008 14:18:05 GMT)
X-Complaints-To: news@news.nivel5.cl
NNTP-Posting-Date: Tue, 28 Oct 2008 14:18:05 +0000 (UTC)
User-Agent: NewsPortal/0.3X RCL MOD
X-Abuse: robertocl@gmail.com
X-HTTP-Posting-Host: 201.238.209.35