我正在VS 2010中开发一个win-forms应用程序,以便从Sql Server
或MySQL
检索数据。
在此我使用下面的GUI分配连接sting。
通过以下函数添加或修改目的地的MySQL连接字符串。
private static void CreateDConnectionString(string server,string port, string dataBase, string userId, string password)
{
try
{
var connectionBuilder = new MySqlConnectionStringBuilder()
{
Server = server,
Port = port,
Database = dataBase,
UserID = userId,
Password = password
};
//Open the app.config for modification
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//Retreive connection string setting
var connectionString = config.ConnectionStrings.ConnectionStrings["DConnection"];
if (connectionString == null)
{
//Create connection string if it doesn't exist
config.ConnectionStrings.ConnectionStrings.Add(new ConnectionStringSettings
{
Name = "DConnection",
ConnectionString = connectionBuilder.ConnectionString,
ProviderName = "MySql.Data.MySqlClient"
});
}
else
{
//Only modify the connection string if it does exist
connectionString.ConnectionString = connectionBuilder.ConnectionString;
}
//Save changes in the app.config
config.Save(ConfigurationSaveMode.Modified);
}
catch (Exception)
{
MessageBox.Show(@"Need to work on configration");
throw;
}
}
在代码上的这个函数
Port = port,
我收到的错误是无法将源类型string
转换为目标类型uint
答案 0 :(得分:2)
端口不接受字符串值。
需要一个int
因此要么传递一个整数,要么使用Int32.Parse(port)
编辑:显然与文档背道而驰,
Uint32.Parse(port)
答案 1 :(得分:2)
因为MySqlConnectionStringBuilder.Port
的类型为uint
(无符号整数),并且您正在尝试分配类型为string
的对象:这些类型不兼容,所以没有隐式转换他们之间。
首先应验证字符串是否可以转换为uint
,如下所示:
private static void CreateDConnectionString(string server,string port, string dataBase, string userId, string password)
{
uint portNumber;
if(! uint.TryParse(port, out portNumber))
{
//unsuccessful parse, report error to the user
return;
}
//...
}
编辑:修复了代码中的错误
答案 2 :(得分:1)
Port = port,
您需要将字符串端口转换为端口
的数据类型Port = Convert.ToUInt32(port, 16);