C#MySQL / Connector Number始终为0

时间:2014-07-22 22:35:40

标签: c# mysql mysql-connector

connectionString = "SERVER=localhost;DATABASE=NT;UID=" + dbuser + ";PASSWORD=" + dbpass + ";";

connection = new MySqlConnection(connectionString);

OpenConnection();


//open connection to database
    private bool OpenConnection()
    {
        try
        {
            connection.Open();
            return true;
        }
        catch (MySqlException ex)
        {
            //The two most common error numbers when connecting are as follows:
            //0: Cannot connect to server.
            //1045: Invalid user name and/or password.
            switch (ex.Number)
            {
                case 0:
                    Console.WriteLine(" >>>> Cannot contact MySQL Server ");//MessageBox.Show("Cannot connect to server.  Contact administrator");
                    break;

                case 1045:
                    Console.WriteLine(" >>>> Invalid username/password, please try again");
                    break;

                case 1042:
                    Console.WriteLine(" >>>> Unable to resolve DNS");
                    break;
            }
            return false;
        }
    }

上面的代码成功连接到localhost数据库并登录但数据库" NT"不存在(我知道),但ex.Number属性设置为0 用错误的用户名/密码组合我也遇到了同样的问题。 异常消息/文本为我提供了错误的字符串,但是数字字段始终设置为0.任何帮助都将非常感谢。

非常感谢, 本

EDIT / UPDATE enter image description here enter image description here

2个屏幕抓取之间的唯一区别是我将NT更改为测试(NT不存在(消息报告正确而不是数字)并且测试确实存在)

我想知道这是否是预期的行为?是否基本上拒绝连接,因为该数据库不存在?

4 个答案:

答案 0 :(得分:1)

我正在使用MySql Connector .Net 6.9.4并且还遇到了这个问题。我发现有一个MyExqlException类型的InnerException,它有错误号。你可以尝试我的助手方法:

public static int GetExceptionNumber(MySqlException my)
{
    if (my != null)
    {
        int number = my.Number;
        //if the number is zero, try to get the number of the inner exception
        if (number == 0 && (my = my.InnerException as MySqlException) != null)
        {
            number = my.Number;
        }
        return number;
    }
    return -1;
}

问候

答案 1 :(得分:0)

不要设置PASSWORD,而是设置PWD,如下所示:

connectionString = "SERVER=localhost;DATABASE=NT;UID=" + dbuser + ";PWD=" + dbpass + ";";

答案 2 :(得分:0)

同样的问题也产生了我。 我认为连接器/网络的错误。 请更正以下代码并尝试。

switch (ex.InnerException.Number)
{

在6.9.8中进行了测试。

答案 3 :(得分:0)

我自己遇到了同样的问题,似乎Number字段只填充了内部异常。我不确定为什么会出现这种情况,但MySqlException包含类型为MySqlException的内部异常,而内部异常则包含数字。

所以为了获得这个数字你应该使用这样的东西:

int number;
if (ex.InnerException != null && ex.InnerException is MySqlException)
{
    number = ((MySqlException) ex.InnerException).Number;
}
else
{
    number = ex.Number;
}

这包括对内部异常的空检查和类型检查,如果没有内部异常或者它的类型错误,则返回到外部异常中的数字。