Thread View: chile.comp.programacion
4 messages
4 total messages
Started by Pintamono
Mon, 27 Oct 2008 19:21
Crear DSN con c#
Author: Pintamono
Date: Mon, 27 Oct 2008 19:21
Date: Mon, 27 Oct 2008 19:21
53 lines
2687 bytes
2687 bytes
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.
Re: Crear DSN con c#
Author: gato2008chile
Date: Mon, 27 Oct 2008 23:58
Date: Mon, 27 Oct 2008 23:58
396 lines
16191 bytes
16191 bytes
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.
>
>
>
Re: Crear DSN con c#
Author: Pintamono
Date: Tue, 28 Oct 2008 14:16
Date: Tue, 28 Oct 2008 14:16
117 lines
4715 bytes
4715 bytes
Lo solucion� de la siguiente manera:
odbcconf.exe /a {CONFIGSYSDSN "SQL Server"
"DSN=MiNombreDSN|Description=MiDescripcionDSN|SERVER=MiServidor|
Trusted_Connection=Yes|Database=MiBaseDDatos"}
eso lo ejecuto en un proceso y paso por parametros las variables MiNombre,
etc..
El codigo:
private static void ConfigurarOBDC(string psTipo)
{
// psTipo solo indica cual de las dos conexiones que debo crear es la que
creare
string sMensaje="";
string sParametros ="\"SQL Server\"";
if (psTipo=="C")
{
sParametros += " \"DSN="+ ODBCConcentradorName;
sParametros += "|DESCRIPTION=" + ODBCConcentradorDesc;
sParametros += "|SERVER="+ODBCConcentradorServ;
sParametros += "|TRUSTED_CONNECTION=False";
sParametros += "|DATABASE="+BDCon;
//sParametros += "|UID="+UserCon;
//sParametros += "|PWD="+PassCon;
sMensaje = ODBCConcentradorName;
}
if (psTipo=="L")
{
sParametros += " \"DSN="+ ODBCLocalName ;
sParametros += "|DESCRIPTION=" + ODBCLocalDesc;
sParametros += "|SERVER="+MaquinaLocal+ODBCLocalServ;
sParametros += "|TRUSTED_CONNECTION=False";
sParametros += "|DATABASE="+BDLocal;
//sParametros += "|UID="+ UserLocal;
//sParametros += "|PWD=" + PassLocal;
sMensaje = ODBCLocalName;
}
sParametros += "\"}";
Process myProcess = new Process();
myProcess.StartInfo.FileName = "odbcconf.exe";
myProcess.StartInfo.Arguments = @" /a {CONFIGSYSDSN "+ sParametros;
try
{
myProcess.Start();
myProcess.WaitForExit();
Console.Write("\nConexion ODBC "+sMensaje+" creada Exitosamente\n");
}
catch (Exception ex)
{
Console.Write("\nError al crear la conexion ODBC, Error: "+ex.Message);
return;
}
finally
{
myProcess.Dispose();
}
}
Pintamono wrote:
> 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.
Re: Crear DSN con c#
Author: Pintamono
Date: Tue, 28 Oct 2008 14:18
Date: Tue, 28 Oct 2008 14:18
404 lines
16957 bytes
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.
>>
>>
>>
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads