此问题扰民大发了。
最终毙之:
2011-11-2 16:24:56:MySql.Data.MySqlClient.MySqlException: Unable to connect to any of the specified MySQL hosts. ---> System.Net.Sockets.SocketException: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 127.0.0.1:3307
在 System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
在 MySql.Data.Common.StreamCreator.CreateSocketStream(IPAddress ip, Boolean unix)
在 MySql.Data.Common.StreamCreator.GetStream(UInt32 timeout)
在 MySql.Data.MySqlClient.NativeDriver.Open()
--- 内部异常堆栈跟踪的结尾 ---
在 MySql.Data.MySqlClient.NativeDriver.Open()
在 MySql.Data.MySqlClient.Driver.Open()
在 MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
在 MySql.Data.MySqlClient.MySqlConnection.Open()
在 PubFun.ConData.ExcSQL(String sql, Int32 timeOut)
在网上搜索了很多原因:
1. mysql.data.dll 服务器端和客户端版本不对应。 别人说的我没有明白,mysql.data.dll版本好像只有应用程序这一端才会用吧。其他地方不用啊。
mysql安装在服务器端后,有这个东东吗?不知道。再议。
也有人说,换个mysql.data.dll的版本就好了,但是我用.net framework3.5,试了几个版本后,发现编译不过去。所以,再议。
2. mysql 链接字符串
最初链接:
ConstPar.mysqlconstr = "server=" + ConXML.GetNodeValue("//DataBase", "ip") + ";user id=" + ConXML.GetNodeValue("//DataBase", "user") + ";password=" + ConXML.GetNodeValue("//DataBase", "psd") + ";pooling=false;Port=" + ConXML.GetNodeValue("//DataBase", "port");
修改为:
ConstPar.mysqlconstr = "server=" + ConXML.GetNodeValue("//DataBase", "ip") + ";user id=" + ConXML.GetNodeValue("//DataBase", "user") + ";password=" + ConXML.GetNodeValue("//DataBase", "psd") + ";pooling=false;Port=" + ConXML.GetNodeValue("//DataBase", "port")+";CharSet=utf8;Allow Zero Datetime=true";
3. mysql链接字符串。
最终修改为:
ConstPar.mysqlconstr = "server=" + ConXML.GetNodeValue("//DataBase", "ip") + ";user id=" + ConXML.GetNodeValue("//DataBase", "user") + ";password=" + ConXML.GetNodeValue("//DataBase", "psd") + ";pooling=true;Port=" + ConXML.GetNodeValue("//DataBase", "port")+";CharSet=utf8;Allow Zero Datetime=true";
有朋友该说了,这不和2中修改后的一样吗?
请注意:pooling=true;
最后,修改这个后,再也没有出现上面的问题了。