MySQL System.FormatException:输入字符串的格式不正确

时间:2011-05-04 16:56:03

标签: mysql asp.net-mvc

目前,我正在使用ASP.NET MVC3和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()。

这里有什么问题?

提前谢谢!

3 个答案:

答案 0 :(得分: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();
     }
 }

CORRECTION:cmd.Parameters.Add(new MySqlParameter(“first_name”,MySqlDbType.VarChar)); NOT:cmd.Parameters.AddWithValue(“first_name”,MySqlDbType.VarChar);

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

答案 1 :(得分:0)

我猜是找不到用户,或者fname为空。

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

祝你好运。

答案 2 :(得分:0)

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