无法连接到任何指定的 mysql 主机.C# MySQL
本文关键字:mysql 主机 MySQL 连接 任何指 | 更新日期: 2023-09-27 18:25:52
我在执行代码时收到上述错误 -
MySqlConnection mysqlConn=new MySqlConnection("server=127.0.0.1;uid=pankaj;port=3306;pwd=master;database=patholabs;");
mysqlConn.Open();
我尝试将服务器设置为本地主机,将用户设置为root,但是我收到以下错误-
Error: 0 : Unable to connect to any of the specified MySQL hosts.
System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled</TraceIdentifier><Description>Unhandled exception</Description><AppDomain>DBSync.exe</AppDomain><Exception><ExceptionType>MySql.Data.MySqlClient.MySqlException, MySql.Data, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d</ExceptionType><Message>Unable to connect to any of the specified MySQL hosts.</Message><StackTrace>
at MySql.Data.MySqlClient.NativeDriver.Open()
at MySql.Data.MySqlClient.Driver.Open()
at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
at MySql.Data.MySqlClient.MySqlPool.GetConnection()
at MySql.Data.MySqlClient.MySqlConnection.Open()
at DBSync.MainForm.BtnCalculateClick(Object sender, EventArgs e) in c:'Documents and Settings'Test01'My Documents'SharpDevelop Projects'DBSync'DBSync'MainForm.cs:line 51
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message&amp; m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message&amp; m)
at System.Windows.Forms.ButtonBase.WndProc(Message&amp; m)
at System.Windows.Forms.Button.WndProc(Message&amp; m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp; m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp; m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&amp; msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at DBSync.Program.Main(String[] args) in c:'Documents and Settings'Test01'My Documents'SharpDevelop Projects'DBSync'DBSync'Program.cs:line 27</StackTrace><ExceptionString>MySql.Data.MySqlClient.MySqlException (0x80004005): Unable to connect to any of the specified MySQL hosts.
at MySql.Data.MySqlClient.NativeDriver.Open()
at MySql.Data.MySqlClient.Driver.Open()
at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
at MySql.Data.MySqlClient.MySqlPool.GetConnection()
at MySql.Data.MySqlClient.MySqlConnection.Open()
at DBSync.MainForm.BtnCalculateClick(Object sender, EventArgs e) in c:'Documents and Settings'Test01'My Documents'SharpDevelop Projects'DBSync'DBSync'MainForm.cs:line 51
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message&amp; m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message&amp; m)
at System.Windows.Forms.ButtonBase.WndProc(Message&amp; m)
at System.Windows.Forms.Button.WndProc(Message&amp; m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp; m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp; m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&amp; msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at DBSync.Program.Main(String[] args) in c:'Documents and Settings'Test01'My Documents'SharpDevelop Projects'DBSync'DBSync'Program.cs:line 27</ExceptionString><DataItems><Data><Key>Server Error Code</Key><Value>1042</Value></Data></DataItems></Exception></TraceRecord>
我可以通过 mysql 工作台连接到 mysql 服务器并查询数据库。只有代码不起作用。编辑:我注意到当我使用sharpdevelop而不是使用Visual Studio时,错误会突然出现。
有时连接字符串中参数的间距和顺序很重要(基于个人经验和漫长的夜晚:S(
所以坚持这里的标准格式
服务器=我的服务器地址;端口 = 1234;数据库=我的数据库; uid=我的用户名;Pwd=我的密码;
我在本地网络上的计算机上运行mysql。MySQL Workbench可以连接到该服务器,但不能连接到我的c#代码。我通过断开与正在运行的 vpn 客户端的连接解决了我的问题。
由于这是谷歌上的最佳结果:
如果您的连接最初有效,但在多次成功连接后开始看到此错误,则可能是此问题。
总之:如果您打开和关闭连接,Windows 会出于某种愚蠢的原因保留 TCP 端口以供将来使用。 多次执行此操作后,它会用完可用端口。
本文给出了一个注册表黑客来解决这个问题......
以下是我在XP/2003上的注册表设置:
HKEY_LOCAL_MACHINE'SYSTEM'CurrentControlSet'Services'Tcpip'Parameters'MaxUserPort 0xFFFF (DWORD) HKEY_LOCAL_MACHINE'SYSTEM'CurrentControlSet'Services'Tcpip'Parameters'MaxUserPort'TcpTimedWaitDelay 60 (DWORD)
您需要创建它们。默认情况下,它们不存在。
在 Vista/2008 上,您可以使用 netsh 将其更改为以下内容:
netsh int ipv4 set dynamicport tcp start=10000 num=50000
。但真正的解决方案是使用连接池,以便"打开"连接真正重用现有连接。 大多数框架会自动执行此操作,但就我而言,出于某种原因,应用程序手动处理连接。
更新连接字符串,如下所示(不带port
变量(:
MysqlConn.ConnectionString =
"Server=127.0.0.1;Database=patholabs;Uid=pankaj;Pwd=master;"
我找到了解决问题的方法,我遇到了同样的问题。以前我有我的连接字符串,因为请注意,端口:3306
需要像那样连接到服务器127.0.0.1:3306
或像那样从服务器中删除Server=127.0.0.1;Port=3306
具体取决于您的 .NET 环境:
"Server=127.0.0.1:3306;Uid=username;Pwd=password;Database=db;"
它运行良好,直到发生了一些我不确定它到底是什么的事情,可能是我的 .NET 应用程序包的最新更新。看起来连接字符串的格式和间距很重要。无论如何,以下格式似乎对我有用:
"Server=127.0.0.1;Port=3306;Uid=username;Pwd=password;Database=db;"
尝试其中任何一个版本,看看哪个版本适合您。
我还注意到您没有使用骆驼外壳,可能就是这样。确保您的属性名称采用大写字母大小写,如下所示
Server
Port
Uid
Pwd
Database
试试这个:
MySqlConnectionStringBuilder conn_string = new MySqlConnectionStringBuilder();
conn_string.Server = "127.0.0.1";
conn_string.Port = 3306;
conn_string.UserID = "root";
conn_string.Password = "myPassword";
conn_string.Database = "myDB";
MySqlConnection MyCon = new MySqlConnection(conn_string.ToString());
try
{
MyCon.Open();
MessageBox.Show("Open");
MyCon.Close();
MessageBox.Show("Close");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
有时问题可能出在您的Windows防火墙上,请确保您的服务器允许访问与mysql数据库关联的所有端口。
就我而言,主机有一个用于远程连接到MySql的白名单。尝试将您的IP添加到托管管理面板中的白名单中。
使用SqlConnectionStringBuilder
来简化连接
System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder();
builder["Initial Catalog"] = "Server";
builder["Data Source"] = "db";
builder["integrated Security"] = true;
string connexionString = builder.ConnectionString;
SqlConnection connexion = new SqlConnection(connexionString);
try { connexion.Open(); return true; }
catch { return false; }
刚刚遇到了同样的问题。在目标计算机上安装 .NET 框架解决了这个问题。
更好的是,确保所有必需的依赖项都存在于将运行代码的计算机中。
适用于运行VS2013的用户
在窗口 10 中。
检查 apache 服务是否正在运行,因为它被万维网服务取代。
运行 netstat -n 来检查这一点。
停止服务。启动 Apache。重新启动服务。
我遇到了完全相同的错误。
以下是您需要执行的操作:
如果您使用的是 MAMP,请关闭服务器。然后在再次打开 MAMP 时单击首选项按钮(当然是在重新启动服务器之前(。
然后,您需要单击端口选项卡,然后单击"将Web和MySQL端口设置为80和3306"按钮。
如果使用本地主机 URL 访问实时数据库,则它不起作用。请在IIS上部署您的服务或网站并创建URL,然后使用新URL访问数据库,它将起作用。
在我的情况下,通过从连接字符串中删除部分"port=3306;"解决了问题。
试试这个:
try
{ //run something
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
如果这对某人有帮助,尽管这可能是一个非常具体的用例......今天我们在 docker 群环境中遇到了这个问题。连接字符串在环境变量中看起来不错,我们能够从工作台等进行连接。事实证明,我们以某种方式将 docker 镜像从开发环境推送到 swarm 环境中,并且开发镜像进行了代码更改,这会破坏连接字符串。我们所要做的就是重新运行管道,将正确的图像推送到群体环境中。
如果连接字符串正常,并且在 MacOS 上使用 MAMP,请确保选中 MySQL 选项卡下Allow network access to MySQL
选项。
using System;
using System.Linq;
using MySql.Data.MySqlClient;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// add here your connection details
String connectionString = "Server=localhost;Database=database;Uid=username;Pwd=password;";
try
{
MySqlConnection connection = new MySqlConnection(connectionString);
connection.Open();
Console.WriteLine("MySQL version: " + connection.ServerVersion);
connection.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Console.ReadKey();
}
}
}
确保您的数据库服务器正在运行,如果它没有运行,那么它无法建立连接,默认情况下MySQL在3306上运行,所以如果端口号不同,则