无法在c#中将源类型'string'转换为目标类型'uint'错误

时间:2013-11-28 12:08:52

标签: c# mysql

我正在VS 2010中开发一个win-forms应用程序,以便从Sql ServerMySQL检索数据。

在此我使用下面的GUI分配连接sting。

GUI Screenshot

通过以下函数添加或修改目的地的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

3 个答案:

答案 0 :(得分:2)

端口不接受字符串值。

需要一个int

http://www.devart.com/dotconnect/mysql/docs/Devart.Data.MySql~Devart.Data.MySql.MySqlConnectionStringBuilder~Port.html

因此要么传递一个整数,要么使用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);