【问题标题】:Change/Create ODBC connection from code从代码更改/创建 ODBC 连接
【发布时间】:2025-12-09 04:40:02
【问题描述】:

我正在通过 ODBC 连接从 C# ASP .Net 4.0 处理 Informix DB。该数据库确实经常更改,因此我从 sysmaster 表中读取了安装的数据库。

根据我的用户所做的选择,我需要设置与所选数据库的 ODBC 连接或更改当前连接以从系统主数据库更改为所选数据库。

有人知道怎么做吗?我怀疑必须可以设置一个临时的 ODBC 连接。同样在我的 ODBC 连接属性下的 Visual Studio 中,我确实有一个连接字符串,如下所示:

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

我四处寻找一个库,可以在没有 ODBC 的情况下直接连接到 informix,但现在成功了。

谢谢, 斯蒂芬

【问题讨论】:

    标签: .net database odbc informix


    【解决方案1】:

    我已经制定了一个非常好的解决方案。我没有意识到 .NET 完全支持从后面的代码执行此操作,而无需实际修改 ODBC 设置。

        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/>";
        }
    

    我猜你必须在尝试后面的代码之前设置一个有效的 ODBC 连接,以确保驱动程序可以正常定位,或者至少查看可用的 ODBC 驱动程序列表。

    【讨论】:

    • 我应该如何获取驱动程序信息(Informix,在上述情况下)。 dotnet有什么方法可以得到它。
    【解决方案2】:

    我想你可以直接弄乱注册表,但你也可以调用odbcconf.exe,这是一个标准的 Windows 实用程序。这是MSDN link

    当我研究如何操作 ODBC 连接时,我做了如下的事情来添加一个连接:

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

    当然,您可以将? 替换为您自己的参数。

    【讨论】:

    • 可能会调查一下,它并不是真正的“线程”安全,但另一种选择是每天为每个活动数据库创建一个可供多个实例使用的 DNS 的脚本。跨度>