使用 ODBC 和用户输入连接字符串在 C# 应用程序中连接到 Oracle 11g

Posted

技术标签:

【中文标题】使用 ODBC 和用户输入连接字符串在 C# 应用程序中连接到 Oracle 11g【英文标题】:Connect to Oracle 11g in C# Application Using ODBC and User Input Connection String 【发布时间】:2014-09-15 20:49:46 【问题描述】:

我正在开发一个 C# 应用程序,我们希望使用 ODBC 连接到 Oracle 数据库。当我尝试打开连接时,它给了我“错误 [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified”。它正在尝试使用以下方法连接到 Oracle 11g 数据库:

    public OdbcConnectionStringBuilder buildOdbcConnectionString(string InitialCatalog)
    
        OdbcConnectionStringBuilder connStr = new OdbcConnectionStringBuilder();

        connStr.Driver = "Microsoft ODBC for Oracle;";

        connStr.ConnectionString = "Driver=Microsoft ODBC for Oracle;" + "CONNECTSTRING=(DESCRIPTION="
                + "(ADDRESS=(PROTOCOL=TCP)(HOST=" + tbDbServer.Text + ")(PORT=1521))"
                + "(CONNECT_DATA=(SERVICE_NAME=" + InitialCatalog + ")));"
                + "User Id=" + tbUser.Text + ";Password=" + tbPassword.Text + ";"
                + "Connection Timeout = 300;";

        return connStr;
    

    public DbConnection(string name, OdbcConnectionStringBuilder odbcStringBuilder )
    
        try
        
            Name = name;
            odbcConnection = new OdbcConnection(odbcStringBuilder.ConnectionString);
        
        catch (Exception e)
        
            throw e;
        
    

    public void Open(OdbcConnection testConn)
    
        if (testConn.State == ConnectionState.Closed)
        
            testConn.Open();
        
    

    public Boolean testConnection(OdbcConnection testConn)
    
        try
        
            Open(testConn);
            Close(testConn);
            return true;
        
        catch
        
            return false;
        
    

关于我需要调整什么以使其能够连接有什么想法吗?

【问题讨论】:

【参考方案1】:

我认为您不能将所有 Oracle 内容放入连接字符串中,但无论如何,ODBC 驱动程序管理器看起来要么被您的连接字符串弄糊涂了,要么您没有安装 Microsoft ODBC for Oracle 驱动程序.如果您安装了该驱动程序,那么计算连接字符串的一种简单方法是 a) 使用驱动程序管理器对话框创建一个 DSN,b) 测试它是否有效 c) 使用 DSN=mydsn 在您的代码中连接 d) 检查输出连接字符串 SQLDriverConnect 可以返回(即 C API,但我认为在 C# 中您可以获得相同的信息)。然后,您可以删除您的 DSN 并使用为无 DSN 连接返回的字符串 SQLDriverConnect。

【讨论】:

我可能应该提供更多背景信息。我们正在尝试制作一个独立的应用程序,它可以从不同的数据库类型中获取信息。我们想使用 ODBC 来创建(大部分)单一方式来连接到这些不同的数据库类型。也许我的做法是错误的,因为我不希望每个用户都必须安装 Oracle 才能运行这个应用程序。我可以引用 dll 作为我的驱动程序吗? (我可以将它与应用程序一起放入并确定文件路径) 如果您想通过 ODBC 与 oracle 对话,您需要安装 MS(或 Oracle)ODBC 驱动程序,我相信至少是 Oracle 即时客户端。 你是对的。我尝试通过 Visual Studio 进行创建,它说如果不安装 Oracle 就无法创建。感谢您的帮助!

以上是关于使用 ODBC 和用户输入连接字符串在 C# 应用程序中连接到 Oracle 11g的主要内容,如果未能解决你的问题,请参考以下文章

c#用odbc连接mysql报错

通过 ODBC 从 C# 读取 Netezza 数据库表在 Windows 7 中不起作用

ODBC 连接凭据如何存储在 MS Access 中? [关闭]

C# - ODBC 参数起作用

使用 odbc 连接到开放式办公室 [关闭]

SQLite 3 和 Odbc 数据源名称