2011-05-04 166 views
1

当前,我使用ASP.NET MVC3和MySQL创建应用程序,当我试图从数据库中检索用户的名字时,我收到一个System.FormatException:输入字符串的格式不正确。MySQL System.FormatException:输入字符串格式不正确

这是我的代码:

public string GetUserFirstName(UInt64 id) 
{ 
    DBConnections databaseCnnString = new DBConnections(); 
    string connectionString = "server=123.123.com;user=me;database=db1;port=3306;password=abcdef"; 
    MySqlConnection cnn = new MySqlConnection(connectionString); 

    try 
    { 
     cnn.Open(); 
     string sp_GetFName = "SP_GET_FNAME"; 
     MySqlCommand cmd = new MySqlCommand(sp_GetFName, cnn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("id", id); 
     cmd.Parameters["id"].Direction = ParameterDirection.Input; 
     cmd.Parameters.AddWithValue("first_name", MySqlDbType.VarChar); 
     cmd.Parameters["first_name"].Direction = ParameterDirection.Output; 

     object result = cmd.ExecuteScalar(); 
     if (result != null) 
     { 
     string fname = Convert.ToString(result); 
     return fname; 
     } 
     else 
     { 
     string fname = "friend"; 
     return fname; 
     } 

    } 
    catch (Exception ex) 
    { 
     throw (ex); 
    } 
    finally 
    { 
     cnn.Close(); 
     cnn.Dispose(); 
    } 
} 

这是MySQL的存储过程:

CREATE DEFINER=`0001`@`%` PROCEDURE `SP_GET_FNAME`(IN id BIGINT(20), OUT first_name VARCHAR(60)) 
BEGIN 
    DECLARE user_id BIGINT(20) DEFAULT id; 
    DECLARE output VARCHAR(60); 
    SELECT `FName` FROM `users` WHERE USERID=user_id INTO output; 
    SET first_name = output; 
END 

这个问题似乎执行cmd.ExecuteScalar时是()。

这是什么问题?

预先感谢您!

回答

1

复制并粘贴我的错误。如预期那样工作正确的代码是:

public string GetUserFirstName(UInt64 id) 
{ 
    DBConnections databaseCnnString = new DBConnections(); 
    string connectionString = "server=123.123.com;user=me;database=db1;port=3306;password=abcdef"; 
    MySqlConnection cnn = new MySqlConnection(connectionString); 

    try 
    { 
     cnn.Open(); 
     string sp_GetFName = "SP_GET_FNAME"; 
     MySqlCommand cmd = new MySqlCommand(sp_GetFName, cnn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("id", id); 
     cmd.Parameters["id"].Direction = ParameterDirection.Input; 
     cmd.Parameters.Add(new MySqlParameter("first_name", MySqlDbType.VarChar)); 
     cmd.Parameters["first_name"].Direction = ParameterDirection.Output; 
     cmd.ExecuteScalar(); 
     string fname = Convert.ToString((cmd.Parameters["first_name"].Value)); 

     return fname; 

    } 
    catch (Exception ex) 
    { 
     throw (ex); 
    } 
    finally 
    { 
     cnn.Close(); 
     cnn.Dispose(); 
    } 
} 

更正:cmd.Parameters.Add(新了MySQLParameter( “FIRST_NAME”,MySqlDbType.VarChar)); NOT:cmd.Parameters.AddWithValue(“first_name”,MySqlDbType.VarChar);

在我的情况下,用户表中的FNAME字段不能为NULL;因此,检查代码中返回的NULL值是不必要的。

0

我猜测用户没有找到或fname为空。

我真的很希望你不会为每个用户列查询数据库。

祝你好运。

+0

哈哈...不...用户在那里,我不查询每个用户列的数据库。如果我使用Workbench直接执行查询,它将返回一个单值,这正是我正在寻找的。 – 2011-05-04 22:54:24

0

附加评论。 尝试返回字符串值时,AddWithValue似乎试图将字符串的输出转换为数字。这会导致字符串格式异常。

相关问题