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
2个屏幕抓取之间的唯一区别是我将NT更改为测试(NT不存在(消息报告正确而不是数字)并且测试确实存在)
我想知道这是否是预期的行为?是否基本上拒绝连接,因为该数据库不存在?
答案 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;
}
这包括对内部异常的空检查和类型检查,如果没有内部异常或者它的类型错误,则返回到外部异常中的数字。