Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL System.FormatException:输入字符串的格式不正确_Mysql_Asp.net Mvc - Fatal编程技术网

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

MySQL System.FormatException:输入字符串的格式不正确,mysql,asp.net-mvc,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

目前,我正在使用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()时

我这里有什么问题


提前谢谢你

我猜找不到用户或者fname为null

我真的希望您不是在为每个用户列查询数据库


祝你好运。

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

我真的希望您不是在为每个用户列查询数据库


祝你好运。

我复制粘贴错误。正常工作的正确代码是:

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)


在我的例子中,user表中的FNAME字段不能为NULL;因此,无需检查代码中返回的空值。

复制粘贴错误。正常工作的正确代码是:

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)

在我的例子中,user表中的FNAME字段不能为NULL;因此,无需检查代码中返回的空值。

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

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

哈哈。。。不用户就在那里,我没有查询数据库中的每个用户列。如果我直接使用Workbench执行查询,它将返回一个值,这就是我要寻找的。哈哈。。。不用户就在那里,我没有查询数据库中的每个用户列。如果我直接使用Workbench执行查询,它将返回一个值,这就是我要寻找的。