此問題擾民大發了。
最終斃之:
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;
最後,修改這個後,再也沒有出現上面的問題了。