2010-12-23 10 views
4

Ich arbeite gegen eine Informix DB von C# ASP. Net 4.0 über eine ODBC-Verbindung. Diese Datenbank ändert sich häufig, daher lese ich aus der sysmaster-Tabelle, welche DBs installiert sind.Ändern/Erstellen ODBC-Verbindung von Code

Abhängig von der Wahl meines Benutzers muss ich eine ODBC-Verbindung zur gewählten DB einrichten oder die aktuelle Verbindung ändern, um von der systmaster DB zur gewählten zu wechseln.

Wer hat eine Idee, wie man das macht? Ich vermute, dass es möglich sein muss, eine temporäre ODBC-Verbindung einzurichten. Auch in Visual Studio unter den Eigenschaften für meine ODBC-Verbindung zu tun ich so eine Verbindungszeichenfolge haben suchen:

Dsn=Informix;uid=xxxxx;database=sysmaster;host=10.10.10.10;srvr=testdb1;serv=3000;pro=onsoctcp;cloc=en_US.819;dloc=en_US.819;vmb=0;curb=0;scur=0;icur=0;oac=1;optofc=0;rkc=0;odtyp=0;ddfp=0;dnl=0;rcwc=0 

Ich habe schaute sich um für eine Bibliothek direkt ohne die ODBC zu verbinden Informix aber jetzt mit Erfolg.

Danke, Stefan

Antwort

3

Ich habe eine funktionierende Lösung ausgearbeitet, die ziemlich nett ist. Ich wusste nicht, dass .NET volle Unterstützung hatte, um dies aus dem Code heraus zu tun, ohne die ODBC-Einstellungen zu ändern.

const string sConnString = "Driver=Informix;uid=user;pwd=password;database=x10stg01_1312;host=10.10.10.10;srvr=testdb1;serv=3000;pro=onsoctcp;cloc=en_US.819;dloc=en_US.819;vmb=0;curb=0;scur=0;icur=0;oac=1;optofc=0;rkc=0;odtyp=0;ddfp=0;dnl=0;rcwc=0"; 
    var oOdbcConnection = new System.Data.Odbc.OdbcConnection(sConnString); 

    string queryString = 
     "SELECT * FROM tevoc WHERE ev_oc_id=6599098"; 
    OdbcCommand command = new OdbcCommand(queryString); 

    command.Connection = oOdbcConnection; 
    oOdbcConnection.Open(); 
    OdbcDataReader odbcDataReader = command.ExecuteReader(); 

    while (odbcDataReader.Read()) 
    { 
     CheckDiv.InnerHtml += "Result: " + odbcDataReader.GetString(6) + "<br/>"; 
    } 

Ich denke, Sie Setup über eine funktionierende ODBC-Verbindung ein, bevor Sie den Code hinter versuchen, nur sicher zu sein, kann der Treiber in der Liste der verfügbaren ODBC-Treiber ok oder zumindest Blick befindet.

+0

Wie soll ich die Fahrerinfo bekommen (Informix, im obigen Fall). Gibt es einen Weg in Dotnet, um es zu bekommen? –

2

Ich nehme an, Sie verwirren mit der Registrierung direkt könnten, aber man könnte auch odbcconf.exe nennen, die ein Standard-Windows-Programm ist. Hier ist ein MSDN link

zurück, als ich darüber nachdachte, wie ODBC-Verbindungen zu manipulieren, habe ich so etwas wie die folgende Verbindung hinzuzufügen:

odbcconf.exe /a {CONFIGSYSDSN "SQL Server" "DSN=?|Description=?|SERVER=?(local)|Trusted_Connection=no|Database=?"} 

Natürlich würden Sie die ? mit Ihrem eigenen Parameter ersetzen .

+0

Vielleicht schauen Sie sich das an, es ist nicht wirklich "thread" sicher, aber eine Alternative wäre, ein Skript zu haben, das täglich für jede aktive DB ein DNS erstellt, das von mehreren Instanzen verwendet werden kann. – StefanE