【问题标题】:SQL c# determining type of sql serverSQL c#确定sql server的类型
【发布时间】:2015-10-02 21:05:40
【问题描述】:

有人知道以编程方式确定 sql server 是 mysql 还是 mssql 安装的好方法吗?

我有一个 C# 应用程序,它必须能够连接到 mysql 或 mssql。如果我知道它是哪个,我可以连接到任何一个,但我无法从连接设置中分辨出来,因为我得到的只是服务器名称、用户 ID、密码和数据库名称。

我可以让设置文件存储服务器的类型,但这为我想避免的用户错误开辟了一条途径。

【问题讨论】:

  • select version()。这将适用于 mysql,并为您提供版本号。 mssql 等效 select @@version。两者都不应该在相反的系统上工作。
  • 解决方法:使用 try/catch 块。尝试使用 SQL Server 驱动程序打开,如果失败,请尝试使用 mySQL 驱动程序打开。翻转它们以首先捕获最常见的连接类型。
  • 您使用什么类型的身份验证?如果是用户身份验证,您可以从连接字符串中看出。 MySql = UID 和 Sql Server = 用户 ID
  • 他可以通过 ODBC 连接 MSSQL 和 mysql。
  • 所以你是说你不能相信你的最终用户通过列表框选择正确的 RDBMS 系统?哇塞。是的,“尝试连接 1...然后另一个”的答案就是你所能做的。

标签: c# mysql sql sql-server


【解决方案1】:

尝试以 MySQL 连接,如果失败,请优雅地处理错误,然后尝试以 MSSQL 连接。与此大致相似的东西可能对您有用...

string FindDbType(string connectionString)
{
    try
    {
        // try to connect with MySql
        return "MySql";
    } catch()
    {
        try
        {
            // try to connect with MSSQL
            return "MSSql";
        } catch()
        {
            return "Cannot determine DB Type"
        }
    }   
}

您可能希望单独处理错误密码等错误,但这应该可以帮助您入门。

【讨论】:

    【解决方案2】:

    创建像configsettings 这样的表,并在那里放置DB 类型的记录。 (如果您访问的数据库是您的。)

    【讨论】:

    • jboeke 你得到了最有用的答案,但我更愿意在不进行失败测试的情况下这样做。对于其他答案,就像我在帖子中所说的那样,我没有得到连接字符串,只有用户 ID、密码、服务器名和数据库名称。没有要解码的连接字符串,因为我的代码构建了它;如果您已经连接到服务器,则 select version() 可以正常工作。
    猜你喜欢
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 2012-12-21
    相关资源
    最近更新 更多